我想知道我应该为RG1发送什么样的参数。我收到一个SQL错误:
ORA-06553:PLS-306:调用' PROC_CONFIG'错误的参数数量或类型。
我在Oracle中有以下过程:
PROCEDURE "PROC_CONFIG" (
name VARCHAR2 DEFAULT NULL,
in_value IN VARCHAR2 DEFAULT NULL,
RC1 IN OUT GLOBALPKG.RET1
)
IS
value VARCHAR2(255);
option_id NUMBER(10,0);
count NUMBER(10,0);
flags NUMBER(10,0);
user_id NUMBER(10,0);
value_prev VARCHAR2(255);
option_name VARCHAR2(255);
filter VARCHAR2(255);
我只复制了我认为重要的内容以及使用RC1的地方。
BEGIN
value := in_value;
user_id:=ip_user();
IF(user_id = 0) THEN
RETURN ;
END IF;
filter := name;
ip_build_filter(filter);
IF(value is NULL) THEN
OPEN RC1 FOR
SELECT
SUBSTR('000',0,4-length(TO_CHAR(d.option_id))) || TO_CHAR(d.option_id)
|| '. ' || d.name "Option",
u.name "User",
NVL(v.value, '(not specified)') "Value"
FROM option_values v, option_defs d, users u
WHERE (v.option_id = d.option_id)
AND (v.user_id = u.user_id(+))
AND d.name LIKE proc_config.filter
and BITAND(d.flags,15) <> 0;
RETURN;
END IF;
当我从我公司的c ++应用程序发送以下声明时,一切正常,程序选择并显示所有相关数据。
{call proc_config(&#39;&#39;,&#39;&#39;)};
感谢任何试图理解这一点的人!
答案 0 :(得分:1)
在您的示例中,globalpkg.ret1似乎是在名为globalpkg的包的包规范中声明的TYPE of REF CURSOR。为了打电话给您的程序&#34; PROC_CONFIG&#34;你应该将这种类型的IN OUT变量传递给你的程序。调用将以PL / SQL(您可以在Oracle SQL Developer中尝试)的方式查看:
DECLARE
i_rc1 globalpkg.rec1;
BEGIN
"PROC_CONFIG"('','',i_rc1);
END;