我在程序包里面有以下程序:
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, '_', ''))
如何解决?也许是其他方式?
答案 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
有一些较少的括号。
它看起来根本不需要是动态的,但我假设这是一个简化版本的东西。