首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查存储过程语句的有效性

检查存储过程语句的有效性
EN

Stack Overflow用户
提问于 2018-05-11 18:16:00
回答 1查看 52关注 0票数 1

我正在尝试执行这个存储过程语句,

代码语言:javascript
复制
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”

有人能帮我这个忙吗。

EN

回答 1

Stack Overflow用户

发布于 2018-05-11 18:32:26

在动态SQL准备中有一个错误:在"dml_str“准备的第二行。紧跟在别名"B“之后的空格丢失。

你的代码:

代码语言:javascript
复制
|| loc_array(i) || ' B'
||'where A.excn_strt_tm < sysdate-7 and A.excn_id=B.excn_id';

它应该是:

代码语言:javascript
复制
|| 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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50290091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档