PL/SQL 将行存储到变量中并在 for 循环中使用它们
Posted
技术标签:
【中文标题】PL/SQL 将行存储到变量中并在 for 循环中使用它们【英文标题】:PL/SQL Storing row into a variable and using them in for loop 【发布时间】:2014-10-26 14:46:22 【问题描述】:我正在编写脚本,在将行值保存到变量时出错 我正在尝试更新需要从其他相应表中获取的表
DECLARE
cur SYS_REFCURSOR;
dept_row department%rowtype;
employee_row employee%rowtype;
status number :=0;
BEGIN
FOR employee_details IN (select * from employee_details_table)
LOOP
select * into dept_row from department dept where employee_details.dept_id = dept.dept_id;
select * into employee_row from employee emp where emp.dept_id = empoyee_details.dept_id;
IF employee_details.valid <> employee_row.valid THEN
// call SP which uses values from both dept_row & employee_row
END IF;
END LOOP;
COMMIT;
END;
/
当我运行上述 SQL 时,我遇到了错误。 ORA-01722 ORA-06512
我无法弄清楚上面的代码有什么问题。 请帮忙
谢谢
【问题讨论】:
您错误地使用了collection
。此外,最好避免使用 for 的循环,并使用批量收集和 forall 语句来最小化 sql 和 plsql 引擎之间的上下文切换的开销。检查我的答案。
【参考方案1】:
您错误地使用了collection
。另外,最好避免使用for
使用loop
并使用bulk collect
和forall statement
以最小化context switch
在sql and plsql engines
之间的开销。
更多关于collections、bulk collect和forall语句的例子,请参考这里的例子http://oracle-base.com/articles/9i/bulk-binds-and-record-processing-9i.php
记住,最好避开loops
。 Row by row
是 slow by slow
。
【讨论】:
以上是关于PL/SQL 将行存储到变量中并在 for 循环中使用它们的主要内容,如果未能解决你的问题,请参考以下文章
在 FOR 循环中第一次选择 20 条记录并在 oracle 中再次休息时出错
如何使用 SQL Server 将行连接到一个单元格中并在每个单元格之后添加换行符