2016-09-30 88 views
0

我PROC当入门缺少表达式为:SQL使用REGEXP_SUBSTR

create or replace PROCEDURE SP_TBL_COMPARE_TEST3(
    SRC_COLS  IN VARCHAR2, 
    TGT_COLS  IN VARCHAR2) 
IS 
    CNT1  NUMBER(5); 
    SQL_TEXT2 VARCHAR(4000); 

BEGIN 
    SQL_TEXT2:= 'select count(*) from (select regexp_substr('||src_cols||','||'[^,]+'||', +1, level) from dual connect by regexp_substr('||src_cols||','||'[^,]+'||', +1, level) is not null)'; 
    EXECUTE IMMEDIATE SQL_TEXT2 into CNT4; 
END 

我试图得到该SRC的cols的输入和分离算来,但我得到无效的标识符错误。但列中的输入可用并且准确。

连接到数据库sp_test。 ORA-00936:缺失表达式 ORA-06512:在“SP_TEST.SP_TBL_COMPARE_TEST3”,第19行ORA-06512:在 第13行退出进程。断开与数据库的连接sp_test

谁能告诉我什么是错的?

+0

如果你正在计算列表元素,你可以简化:'从双选择regexp_count('1,2,3,4',',')+ 1;'。当然,确保数据不包含分隔符。 –

回答

1

您在动态SQL中缺少一些引号;这应该工作:

create or replace PROCEDURE SP_TBL_COMPARE_TEST3(
    SRC_COLS  IN VARCHAR2, 
    TGT_COLS  IN VARCHAR2) 
IS 
    CNT1  NUMBER(5); 
    SQL_TEXT2 VARCHAR(4000); 

BEGIN 
    SQL_TEXT2:= 'select count(*) from (select regexp_substr('''||src_cols||''','||'''[^,]+'||''', +1, level) from dual connect by regexp_substr('''||src_cols||''','||'''[^,]+'||''', +1, level) is not null)'; 
    dbms_output.put_line(SQL_TEXT2); 
    EXECUTE IMMEDIATE SQL_TEXT2 into CNT1; 
END; 

此外,请注意,你从来没有使用你的程序的第二个参数。

+0

谢谢Aleksej。现在它正在工作 – Maharajaparaman