我正在尝试执行这个存储过程语句,
CREATE OR REPLACE PROCEDURE table_records_select IS
TYPE loc_array_type IS TABLE OF VARCHAR2(100)
INDEX BY binary_integer;
dml_str VARCHAR2 (200);
loc_array loc_array_type;
BEGIN
-- bulk fetch the list of tables
SELECT table_name BULK COLLECT INTO loc_array
FROM all_tab_columns;
-- for each table, delete the records where EXCN_ID matches with EXCN_ID of t_int_excn_log table where excn_strt_tm < sysdate-7
FOR i IN loc_array.first..loc_array.last LOOP
dml_str := 'select B.* from t_int_excn_log A,'
|| loc_array(i) || ' B'
||'where A.excn_strt_tm < sysdate-7 and A.excn_id=B.excn_id';
EXECUTE IMMEDIATE dml_str ;
END LOOP;
END;
/
SHOW ERRORS;看起来存储过程创建成功并显示有效。
但当我尝试执行它时,它显示了各种错误,
ORA-00933: SQL命令未正确结束ORA-06512:位于"HIAB_UAT.TABLE_RECORDS_SELECT",第19行ORA-06512:位于第3行
最后它显示“Procedure Completed”
有人能帮我这个忙吗。
发布于 2018-05-11 18:32:26
在动态SQL准备中有一个错误:在"dml_str“准备的第二行。紧跟在别名"B“之后的空格丢失。
你的代码:
|| loc_array(i) || ' B'
||'where A.excn_strt_tm < sysdate-7 and A.excn_id=B.excn_id';它应该是:
|| loc_array(i) || ' B '
||'where A.excn_strt_tm < sysdate-7 and A.excn_id=B.excn_id';
CREATE OR REPLACE PROCEDURE table_records_select IS
TYPE loc_array_type IS TABLE OF VARCHAR2(100)
INDEX BY binary_integer;
dml_str VARCHAR2 (200);
loc_array loc_array_type;
BEGIN
-- bulk fetch the list of tables
SELECT table_name BULK COLLECT INTO loc_array
FROM user_tab_columns;--all_tab_columns;
-- for each table, delete the records where EXCN_ID matches with EXCN_ID of t_int_excn_log table where excn_strt_tm < sysdate-7
FOR i IN loc_array.first..loc_array.last LOOP
dml_str := 'select B.* from t_int_excn_log A,'
|| loc_array(i) || ' B '
||'where A.excn_strt_tm < sysdate-7 and A.excn_id=B.excn_id';
EXECUTE IMMEDIATE dml_str ;
END LOOP;
END;https://stackoverflow.com/questions/50290091
复制相似问题