Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用游标输入时未执行包_Sql_Oracle_Plsql - Fatal编程技术网

Sql 使用游标输入时未执行包

Sql 使用游标输入时未执行包,sql,oracle,plsql,Sql,Oracle,Plsql,我已根据现有过程创建了一个包,该过程仅给出准确的输出,但在创建包时没有错误,但它没有显示我传递给游标输入的输出文件 ------------------包装如下------------------------- 我尝试过在没有光标的情况下创建包 我曾尝试在没有用户输入的情况下创建游标,但在用户输入的情况下,游标无法正常工作您使用的变量未初始化,因此游标无法获取任何内容。这是因为您全局(针对整个包体)声明了它(以及一组变量),而不是局部(针对过程,当您将参数传递给过程时,从未将任何参数传递给游标

我已根据现有过程创建了一个包,该过程仅给出准确的输出,但在创建包时没有错误,但它没有显示我传递给游标输入的输出文件


------------------包装如下------------------------- 我尝试过在没有光标的情况下创建包
我曾尝试在没有用户输入的情况下创建游标,但在用户输入的情况下,游标无法正常工作

您使用的变量未初始化,因此游标无法获取任何内容。这是因为您全局(针对整个包体)声明了它(以及一组变量),而不是局部(针对过程,当您将参数传递给过程时,从未将任何参数传递给游标。如果您坚持,请创建一个参数化游标)

另外,您已经声明了两次
V_code
;为什么?

无论如何:我建议你这样做:

  • 为循环使用光标
    ,因为它更易于维护(您不必打开、获取、退出、关闭—Oracle会为您这样做)
  • 不声明任何其他变量-使用隐式游标变量
  • 如果删除这样一个异常处理程序,它将毫无用处,因为您没有处理任何事情。如果您从某个前端应用程序(例如Apex或表单)调用该过程,并且发生了某种情况(“其他”,呃?),那么您将不会看到任何作为
    DBMS\u输出的内容。PUT\u LINE
    在那里不起作用
  • 由于
    fromdate
    todate
    都是
    DATE
    s,因此不需要
    to\u DATE
    它们
好的,给你:

CREATE OR REPLACE PACKAGE BODY USER.report
AS
   PROCEDURE distribution (code_in   IN USER.test.code%TYPE,
                           fromdate  IN DATE,
                           todate    IN DATE)
   AS
   BEGIN
      DBMS_OUTPUT.put_line (
         'code' || '    ' || 'COUNT' || '       ' || 'TOTAL');

      FOR cur_r
         IN (  SELECT test.code, COUNT (test.code) AS COUNT, test.crncy
                 FROM USER.table1 JOIN USER.test ON test.id = table1.id
                WHERE     USER.test.opendate BETWEEN fromdate AND todate
                      AND USER.test.code = code_in
             GROUP BY test.code, test.crncy)
      LOOP
         DBMS_OUTPUT.put_line (
               v_code
            || '             '
            || cur_r.code
            || '                '
            || cur_r.COUNT
            || ' '
            || cur_r.crncy);
      END LOOP;
   END distribution;
END report;

这意味着对于游标,我也可以给游标输入声明的变量完成!!!!非常感谢。
CREATE OR REPLACE PACKAGE BODY USER.report
AS
   PROCEDURE distribution (code_in   IN USER.test.code%TYPE,
                           fromdate  IN DATE,
                           todate    IN DATE)
   AS
   BEGIN
      DBMS_OUTPUT.put_line (
         'code' || '    ' || 'COUNT' || '       ' || 'TOTAL');

      FOR cur_r
         IN (  SELECT test.code, COUNT (test.code) AS COUNT, test.crncy
                 FROM USER.table1 JOIN USER.test ON test.id = table1.id
                WHERE     USER.test.opendate BETWEEN fromdate AND todate
                      AND USER.test.code = code_in
             GROUP BY test.code, test.crncy)
      LOOP
         DBMS_OUTPUT.put_line (
               v_code
            || '             '
            || cur_r.code
            || '                '
            || cur_r.COUNT
            || ' '
            || cur_r.crncy);
      END LOOP;
   END distribution;
END report;