Database PL/SQL将行存储到变量中并在for循环中使用它们

Database PL/SQL将行存储到变量中并在for循环中使用它们,database,oracle,loops,plsql,cursor,Database,Oracle,Loops,Plsql,Cursor,我正在编写脚本,在将行值保存到变量中时出错 我正在尝试更新一个表,需要从其他相应的表中获取该表 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_ro

我正在编写脚本,在将行值保存到变量中时出错 我正在尝试更新一个表,需要从其他相应的表中获取该表

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

我无法找出上面代码的错误。 请帮忙

谢谢

您没有正确使用该系列。另外,最好避免使用for和使用bulk-collect和forall语句的循环,以最大限度地减少sql和plsql引擎之间的上下文切换开销

有关集合、批量集合和forall语句的更多示例,请参阅此处的示例

记住,最好避免循环。一行一行慢慢来。

您使用的集合不正确。另外,最好避免使用for和使用bulk-collect和forall语句的循环,以最大限度地减少sql和plsql引擎之间的上下文切换开销。检查我的答案。 DECLARE TYPE t_bulk_collect_test_tab IS TABLE OF employee_table%ROWTYPE; l_tab t_bulk_collect_test_tab; CURSOR c_data IS SELECT * FROM employee_table; BEGIN OPEN c_data; LOOP FETCH c_data BULK COLLECT INTO l_tab LIMIT 10000; EXIT WHEN l_tab.count = 0; ....... End;