在存储过程是否可以通过DB_Link调用另外一个数据库的存储过程
我想在存储过程通过已经建立好的DBLINK 去调用远端数据库的存储过程?
存储过程应该如何写?
CREATE OR REPLACE PROCEDURE p_get_bal_detail
(
in_serviceid IN varchar2,-- 操作码
in_OpID IN VARCHAR2,-- 操作员代码
in_contractcode IN VARCHAR2,-- 合同编号,
In_TRANSACTIONDATE IN VARCHAR2,--赎回日期(某个开放日)
in_mgr_type IN VARCHAR2,-- 赎回申请 I 新增,U修改
in_appsheetserialno IN VARCHAR2,-- 如是 U,则非空
rc1 OUT bssys.tp_cursor,
rc2 OUT bssys.tp_cursor
) IS
v_code varchar2(200);
v_msg varchar2(2000);
n_sumvol number;
n_balvol number;
n_avlvol number;
BEGIN
OPEN rc1 FOR
SELECT 0 AS errorcode, '查询成功'
FROM dual;
OPEN rc2 FOR
select test_user.p_hzsg_get_redeembal@TESTDB(in_serviceid,in_OpID,in_contractcode,
In_TRANSACTIONDATE,
in_mgr_type ,
in_appsheetserialno,
v_code,
v_msg,
n_sumvol,
n_balvol,
n_avlvol)
FROM DUAL;
--SELECT * FROM test_user.FUNDINFO@TESTDB;
END;
我按上面的写,通不过编译。
p_hzsg_get_redeembal为存储过程名字
test_user 为远端数据库名字
testDB 为databaseLink
SELECT * FROM test_user.FUNDINFO@TESTDB;此语句能查出结果。
证明DatabaseLink是好的。
------解决方案--------------------倒没试过,关注
------解决方案--------------------过程中使用dblink是可以的
通不过编译,提示什么错误?
命令行窗口中编译后提示错误时,show errors看看
------解决方案--------------------通过db_link是可以,但是你是使用所连接的数据库的哪个用户建立的的,需要这个用户有足够的权限才行啊!
------解决方案--------------------如果不明白我的意思,可以给我联系
------解决方案--------------------select test_user.p_hzsg_get_redeembal@TESTDB(in_serviceid,in_OpID,in_contractcode,
In_TRANSACTIONDATE,
in_mgr_type ,
in_appsheetserialno,
v_code,
v_msg,
n_sumvol,
n_balvol,
n_avlvol)
FROM DUAL;
1.要注意test_user.p_hzsg_get_redeembal@TESTDB 的返回类型
2.在pl/sql单独call test_user.p_hzsg_get_redeembal@TESTDB 看看能否执行
3. test_user.p_hzsg_get_redeembal@TESTDB 这个函数 在packbody 运行 是要有显式授权的
------解决方案--------------------可以,首先要保证dblink是可用的。