Plsql 游标内部的游标和如何传递变量

Plsql 游标内部的游标和如何传递变量,plsql,Plsql,我需要做两个游标或者一个游标和一个循环。但是一个必须在另一个里面。我正在尝试使用两个游标和一个for,但无法识别外部游标的name表的变量值。 你能帮我吗?你能告诉我做这些最好的方法吗?我是pl/sql的新手。谢谢我把代码放在: DECLARE TABLENAME VARCHAR2(30); LINK VARCHAR2(30); CURSOR FIRST_SELECT IS SELECT A.TABLE_NAME AS TABLENAME, B.LINK AS LINK

我需要做两个游标或者一个游标和一个循环。但是一个必须在另一个里面。我正在尝试使用两个游标和一个for,但无法识别外部游标的name表的变量值。 你能帮我吗?你能告诉我做这些最好的方法吗?我是pl/sql的新手。谢谢我把代码放在:

DECLARE
  TABLENAME VARCHAR2(30);
  LINK VARCHAR2(30);

  CURSOR FIRST_SELECT IS
    SELECT A.TABLE_NAME AS TABLENAME, B.LINK AS LINK  
    FROM ALL_TABLES A, TABLE_CONNECT_LINK B 
    WHERE A.TABLE_NAME=B.COMPARE_TABLE;

BEGIN
  OPEN FIRST_SELECT;
  LOOP
    FETCH FIRST_SELECT INTO TABLENAME,LINK;
    EXIT WHEN FIRST_SELECT%NOTFOUND;

    DECLARE
      PEPELU VARCHAR2(4000);
      TABLE VARCHAR2(70);
      stringconsult VARCHAR2(4000);
      COMPONENTE NUMBER(5);
      TABLE_INSERTAR VARCHAR2(30);
      COLUMN VARCHAR2(30);
      OWNER VARCHAR2(30);

      CURSOR ALL IS
        SELECT TABLE,COLUMN,OWNER FROM TABLENAME;

    BEGIN
      OPEN ALL;
      LOOP
        FETCH ALL INTO TABLE,COLUMN,OWNER;
        EXIT WHEN ALL%NOTFOUND;
            stringconsult:='select ' || owner||','|| TABLE||','|| COLUMN||' from ' || INSERTNAME || ' minus select owner, table_name, column_name from all_tab_columns@'|| LINK||'';
        DBMS_OUTPUT.PUT_LINE(stringconsult || ';');
        DBMS_OUTPUT.PUT_LINE('COMMIT;');
        COMMIT;
      END LOOP;

      CLOSE ALL;

    END;
  END LOOP;

  CLOSE FIRST_SELECT;
END;
/

不能将变量的内容用作表名。您需要使用动态SQL。祝您好运。如果功能与示例相同,您可以简单地将第二个循环声明为存储过程,并将tablename和link作为参数传递,另外您不需要重新声明循环中的每个变量,我建议你在上面和其他人一起声明它们,然后重新分配值。你是说第二次只看for和不看cursor吗?ThanksI正在尝试使用带有for的存储过程,但它给出了表或视图不存在的条件:在varchar2中创建或替换过程差异表,在varchar2中链接为SELECT*FROM表循环DBMS\u OUTPUT.PUT\u LINEtable中的begin for I;端环;终止