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;