pl/sql 循环遍历表并将行的每个条目传递给存储过程
Posted
技术标签:
【中文标题】pl/sql 循环遍历表并将行的每个条目传递给存储过程【英文标题】:pl/sql loop through the table and pass the each entry of the row to a stored procedure 【发布时间】: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 行
请帮我解决这个错误
【问题讨论】:
【参考方案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 授予了它的权限?如果是这样,它将无法在命名存储过程中工作,因此您必须直接(即不通过角色)授予权限。以上是关于pl/sql 循环遍历表并将行的每个条目传递给存储过程的主要内容,如果未能解决你的问题,请参考以下文章