SQL使用regexp_substr时缺少表达式

时间:2016-09-30 09:58:55

标签: oracle plsql

我的处理是:

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:at   第13行已退出流程。断开与数据库sp_test的连接

谁能告诉我出了什么问题?

1 个答案:

答案 0 :(得分: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;

此外,请注意,您从不使用过程的第二个参数。