【问题标题】:pl/sql loop through the table and pass the each entry of the row to a stored procedurepl/sql 循环遍历表并将行的每个条目传递给存储过程
【发布时间】:2021-08-11 10:10:09
【问题描述】:

我有一个包含三列(table_name、column_name、data_type)的表,我试图将这三列的值作为参数传递给循环中的存储过程。

现在,我开发了一个非常基本的代码来检查循环是否正常。

DECLARE
 
  cursor c1 is 
    select table_name, column_name, data_type from table_list;

BEGIN
  FOR i IN c1 LOOP
    DBMS_OUTPUT.PUT_LINE(i.table_name||' ' ||i.column_name ||''||i.data_type);
   
    
  END LOOP;
END;

关于问题的更新:循环工作正常,但是当我调用如下代码所示的过程时,它给了我一个错误

DECLARE
 
  cursor c1 is select table_name, column_name,data_type from table_list;

BEGIN
  FOR i IN c1 LOOP

    DBMS_OUTPUT.PUT_LINE(i.table_name||' ' ||i.column_name ||' '||i.data_type);
    UPD_PII_DATA(i.table_name,i.column_name,i.data_type);
    DBMS_OUTPUT.PUT_LINE(i.table_name|| ' '|| ' and column '|| i.column_name|| ' completed test');

  END LOOP;
END;

第 1 行出错 ORA-00942: 表或视图不存在 ORA-06512: 在“MP_ODI.UPD_PII_DATA”,第 13 行 ORA-06512: 在第 9 行 ORA-06512: 在第 9 行

请帮我解决这个错误

【问题讨论】:

    标签: oracle for-loop stored-procedures plsql cursor


    【解决方案1】:

    按照您的说法,您只需调用该过程并传递由游标检索到的值。打字少一点:

    BEGIN
       FOR i IN (SELECT table_name, column_name, data_type FROM table_list)
       LOOP
          DBMS_OUTPUT.PUT_LINE (i.table_name || ' ' || i.column_name || '' || i.data_type);
    
          -- call the procedure, pass values
          my_procedure (i.table_name, i.column_name, i.data_type);
       END LOOP;
    END;
    

    【讨论】:

    • 嗨@littlefoot,我已经调用了proc,但我收到一个错误:第1行错误ORA-00942:表或视图不存在ORA-06512:在“MP_ODI.UPD_PII_DATA”,第 13 行 ORA-06512:第 9 行 ORA-06512:第 9 行
    • 如您所说,您正在引用一个不存在的表,或者 - 如果存在 - 您没有使用它的权限。如果是后者,它是否 - 无论如何 - 属于另一个用户?如果是这样,您是否通过 role 授予了它的权限?如果是这样,它将无法在命名存储过程中工作,因此您必须直接(即不通过角色)授予权限。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2020-12-27
    • 2014-09-27
    相关资源
    最近更新 更多