我在使用Oracle SQL两次循环结果集时遇到问题。
问题
我有一个游标,可以获取给定表名的所有外键。使用此游标的结果,我遍历所有约束并禁用它们。然后我执行数据导入,然后我需要遍历相同的结果集并启用它们。
CURSOR c_fkeys_inn(tabellnavn IN VARCHAR2)
IS
SELECT table_name,constraint_name, status
FROM user_constraints
WHERE (r_constraint_name,r_owner) IN
(SELECT constraint_name, owner
FROM user_constraints
WHERE owner ='POP'
AND table_name=upper(tabellnavn)
)
AND STATUS = 'ENABLED';
我想做什么
我的大脑直接跳到一个变量。我想只执行一次光标,然后将结果从光标保存到变量。
这是可能的还是我有什么办法可以保存光标和循环两次的结果?
答案 0 :(得分:2)
请尝试此代码。我已经修改了你的代码,只显示约束的表名。您可以根据需要修改plsql的结尾部分。如果您遇到任何错误或问题,请发表评论,谢谢。
CREATE or replace PROCEDURE a_proc(name_table varchar)
AS
CURSOR c_fkeys_inn(tabellnavn IN VARCHAR2)
IS
SELECT table_name,constraint_name, status
FROM user_constraints
WHERE STATUS = 'ENABLED'
AND TABLE_NAME=tabellnavn;
names_t c_fkeys_inn%ROWTYPE;
TYPE c_fkeys IS TABLE OF names_t%TYPE;
fkeys c_fkeys;
BEGIN
OPEN c_fkeys_inn(name_table);
FETCH c_fkeys_inn BULK COLLECT INTO fkeys;
CLOSE c_fkeys_inn;
FOR indx IN 1..fkeys.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(fkeys(indx).table_name);
END LOOP;
END a_proc;
要运行代码,请运行单独的plsql块。请在下面找到一个简单的示例plsql块。
begin
a_proc('SUPPLIER');
END;