使用游标将结果集保存在变量中

Saving result set in variable using a cursor

我在使用 Oracle SQL 遍历结果集两次时遇到问题。

问题

我有一个游标,可以让我获取给定 table 名称的所有外键。使用这个游标的结果,我遍历所有约束并禁用它们。然后我执行数据导入,然后我需要循环相同的结果集并启用它们。

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';

我想做什么

我的大脑直接跳到一个变量。我只想执行一次游标,然后将游标的结果保存到一个变量中。

这可能吗?或者我可以做些什么来保存游标的结果并循环两次?

请尝试此代码。我已经巧妙地修改了您的代码以仅显示约束的 table 名称。您可以根据需要修改 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;