GLOBALPKG.RET1用于什么?

时间:2015-02-23 20:07:47

标签: sql oracle

我想知道我应该为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;)};

感谢任何试图理解这一点的人!

1 个答案:

答案 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;