Sql 使用游标输入时未执行包
我已根据现有过程创建了一个包,该过程仅给出准确的输出,但在创建包时没有错误,但它没有显示我传递给游标输入的输出文件Sql 使用游标输入时未执行包,sql,oracle,plsql,Sql,Oracle,Plsql,我已根据现有过程创建了一个包,该过程仅给出准确的输出,但在创建包时没有错误,但它没有显示我传递给游标输入的输出文件 ------------------包装如下------------------------- 我尝试过在没有光标的情况下创建包 我曾尝试在没有用户输入的情况下创建游标,但在用户输入的情况下,游标无法正常工作您使用的变量未初始化,因此游标无法获取任何内容。这是因为您全局(针对整个包体)声明了它(以及一组变量),而不是局部(针对过程,当您将参数传递给过程时,从未将任何参数传递给游标
------------------包装如下------------------------- 我尝试过在没有光标的情况下创建包
我曾尝试在没有用户输入的情况下创建游标,但在用户输入的情况下,游标无法正常工作您使用的变量未初始化,因此游标无法获取任何内容。这是因为您全局(针对整个包体)声明了它(以及一组变量),而不是局部(针对过程,当您将参数传递给过程时,从未将任何参数传递给游标。如果您坚持,请创建一个参数化游标) 另外,您已经声明了两次
V_code
;为什么?
无论如何:我建议你这样做:
- 为循环使用光标
,因为它更易于维护(您不必打开、获取、退出、关闭—Oracle会为您这样做)
- 不声明任何其他变量-使用隐式游标变量
- 如果删除这样一个异常处理程序,它将毫无用处,因为您没有处理任何事情。如果您从某个前端应用程序(例如Apex或表单)调用该过程,并且发生了某种情况(“其他”,呃?),那么您将不会看到任何作为
在那里不起作用DBMS\u输出的内容。PUT\u LINE
- 由于
和fromdate
都是todate
s,因此不需要DATE
它们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;