varchar in execute immediate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了varchar in execute immediate相关的知识,希望对你有一定的参考价值。
我正在使用以下脚本pl / sql:
EXECUTE IMMEDIATE 'insert into TAB1(ID, CODE, TYPE, ORDRE)
select ''KEY'', ''KEY_LIB'', ''TYP_KEY'', 3 FROM dual
where not exists(
select ID,CODE,TYPE,ORDRE
FROM TAB1
where TYPE=''TYP_KEY''
AND CODE =''KEY_LIB''
)';
我收到以下错误:
- 00000 - “找不到FROM关键字
错误似乎在第二行,但我无法弄清楚什么是错的。有人可以帮忙吗?
答案
Type是Oracle中的关键字。因此,当type是列名时,请尝试使用tablename.Type。这是您修改后的查询:
EXECUTE IMMEDIATE 'insert into TAB1(ID, CODE, TYPE, ORDRE)
select ''KEY'', ''KEY_LIB'', ''TYP_KEY'', 3 FROM dual
where not exists(
select ID,CODE,TYPE,ORDRE
FROM TAB1
where TAB1.TYPE=''TYP_KEY''
AND CODE =''KEY_LIB''
)';
另一答案
你最好这样试试:
EXECUTE IMMEDIATE 'insert into TAB1(ID, CODE, "TYPE", ORDRE)
select :KEY, :KEY_LIB, :TYP_KEY, 3 FROM dual
where not exists(
select ID,CODE,"TYPE",ORDRE
FROM TAB1
where "TYPE" = :TYP_KEY
AND CODE = :KEY_LIB
)'
USING 'KEY', 'KEY_LIB', 'TYP_KEY', 'TYP_KEY', 'KEY_LIB';
另一答案
你可以使用Alternative Quoting Mechanism (''Q'') for String Literals,那么你不需要双引号。使用这种技术,手动测试查询(如果需要)更容易。顺便说一句,你的查询工作正常。
BEGIN
EXECUTE IMMEDIATE
q'[INSERT INTO tab1(id, code, type, ordre)
SELECT 'KEY', 'KEY_LIB', 'TYP_KEY', 3
FROM dual
WHERE NOT EXISTS(
SELECT 1
FROM tab1
where tab1.type = 'TYP_KEY'
AND code = 'KEY_LIB'
)]';
END;
/
以上是关于varchar in execute immediate的主要内容,如果未能解决你的问题,请参考以下文章