使用 regexp_substr 时 SQL 获取缺少的表达式
Posted
技术标签:
【中文标题】使用 regexp_substr 时 SQL 获取缺少的表达式【英文标题】:SQL Getting missing expression when using regexp_substr 【发布时间】:2016-09-30 09:58:54 【问题描述】:我的过程是:
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 断开连接
谁能告诉我怎么了?
【问题讨论】:
如果您计算列表元素,您可以简化:select regexp_count('1,2,3,4', ',')+1 from dual;
。当然要确保数据不包含分隔符。
【参考方案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;
此外,请注意您从不使用过程的第二个参数。
【讨论】:
以上是关于使用 regexp_substr 时 SQL 获取缺少的表达式的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 REGEXP_SUBSTR 时出现错误 (PLS-00201)
Oracle SQL 正则表达式 (regexp_substr)
Oracle SQL 正则表达式 RegExp_SubStr End Of Line (chr(10) 在搜索文本中返回 null
HIVE SQL 中的 REGEXP_SUBSTR 等效项?