替换函数内的错误符号(PL / SQL,ORACLE)

时间:2018-01-09 16:10:53

标签: sql function plsql package oracle12c

我在程序包里面有以下程序:

PROCEDURE test1
IS
     InsertST varchar2(32000) : = 'INSERT INTO tableA (col1, col2) 
                                   (select cola, 
                                   INITCAP(REPLACE(colX, '_', ''))
                                   from tableB))';
Begin
    execute immediate InsertST;
END

在编译期间我收到错误:

  

错误(1177,45):PLS-00103:遇到符号" _"期待以下之一:*& = - +; < /> at in mod mod not rem<>或!=或〜=> =< =<>和/或喜欢像||之间的喜欢4喜欢成员submultiset

功能内部"_"出现问题:INITCAP(REPLACE(colX, '_', ''))

如何解决?也许是其他方式?

1 个答案:

答案 0 :(得分:5)

'INSERT开头的引用字符串结束于colX, '。要引用引号,您需要将引号加倍:

'INSERT INTO tableA (col1, col2) 
 (select cola, 
 INITCAP(REPLACE(colX, ''_'', ''''))
 from tableB))'

或者使用q-quoting语法:

q'[INSERT INTO tableA (col1, col2) 
 (select cola, 
 INITCAP(REPLACE(colX, '_', ''))
 from tableB))]';

此外,赋值运算符为:=而非: =

看起来您想要生成如下语句:

insert into tablea ( col1, col2 )
select cola, initcap(replace(colx, '_', ''))
from   tableb

有一些较少的括号。

它看起来根本不需要是动态的,但我假设这是一个简化版本的东西。