我的处理是:
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的连接
谁能告诉我出了什么问题?
答案 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;
此外,请注意,您从不使用过程的第二个参数。