4es*_*est 0 sql plsql function 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
Run Code Online (Sandbox Code Playgroud)
在编译期间我收到错误:
错误(1177,45):PLS-00103:遇到以下其中一项时遇到符号"_":*&= - +; </> at in是mod的余数不是rem <>或!=或〜=> = <= <>和/或类似like2 like4 likec之间的|| 成员submultiset
东西是错误的"_"内部功能:INITCAP(REPLACE(colX, '_', ''))
怎么解决?也许是其他方式?
引用的字符串开始'INSERT于colX, '.要引用引号,您需要将引号加倍:
'INSERT INTO tableA (col1, col2)
(select cola,
INITCAP(REPLACE(colX, ''_'', ''''))
from tableB))'
Run Code Online (Sandbox Code Playgroud)
或者使用q引用语法:
q'[INSERT INTO tableA (col1, col2)
(select cola,
INITCAP(REPLACE(colX, '_', ''))
from tableB))]';
Run Code Online (Sandbox Code Playgroud)
此外,赋值运算符:=不是: =.
看起来你想要生成这样的语句:
insert into tablea ( col1, col2 )
select cola, initcap(replace(colx, '_', ''))
from tableb
Run Code Online (Sandbox Code Playgroud)
它有几个括号.
它看起来根本不需要是动态的,但我认为这是一个简化的版本.