【发布时间】:2011-10-13 13:49:54
【问题描述】:
我有一个这样的存储过程
CREATE OR REPLACE PROCEDURE schema_name.CHECKS
IS
tbl_name VARCHAR2 (50);
constraint_nm VARCHAR2 (100);
CURSOR cur_constraint
IS
SELECT DISTINCT table_name, constraint_name
FROM all_constraints
WHERE constraint_type = 'R'
AND STATUS = 'ENABLED'
AND R_OWNER = 'owner1'
AND r_constraint_name = 'constraint1';
BEGIN
DBMS_OUTPUT.put_line ('Constraint Name');
OPEN cur_constraint;
LOOP
FETCH cur_constraint
INTO tbl_name, constraint_nm;
EXIT WHEN cur_constraint%NOTFOUND;
DBMS_OUTPUT.put_line (constraint_nm||'~~'||tbl_name);
END LOOP;
close cur_constraint;
END CHECKS;
我通过
执行这个过程set serveroutput on
BEGIN
schema_name.CHECKS ();
END;
我得到的输出是
Procedure created.
Constraint Name
PL/SQL procedure successfully completed.
它不返回任何结果,但理想情况下它应该返回一行(用于定义游标的选择查询将返回一行)。
当我像这样将上述代码作为 PL/SQL 块执行时
DECLARE
tbl_name VARCHAR2 (50);
constraint_nm VARCHAR2 (100);
CURSOR cur_constraint
IS
SELECT DISTINCT table_name, constraint_name
FROM all_constraints
WHERE constraint_type = 'R'
AND STATUS = 'ENABLED'
AND R_OWNER = 'owner1'
AND r_constraint_name = 'constraint1';
BEGIN
FOR i IN cur_constraint
LOOP
EXIT WHEN cur_constraint%NOTFOUND;
DBMS_OUTPUT.put_line (i.constraint_name||' is in '||i.table_name);
END LOOP;
END;
它按预期返回一行。
请帮助我理解为什么除了我执行它的方式之外逻辑相同时它的行为很奇怪。
【问题讨论】:
标签: oracle stored-procedures plsql