我有这样的存储过程
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.
它没有返回任何结果,但理想情况下它应该返回一行(用于定义游标的select查询将返回一行).
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;
它按预期返回一行.
请帮助我理解为什么当逻辑相同时它会表现得很奇怪,除了我执行它的方式.