立即执行中的varchar



我正在使用以下脚本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''
)';

我得到以下错误:

  1. 00000-"在预期位置未找到FROM关键字

错误似乎在第二行,但我不知道出了什么问题。有人能帮忙吗?

Type是Oracle中的一个关键字。所以,试试tablename。当类型是列名时,请键入。这是您修改后的查询:

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';

您可以对字符串文字使用替代引用机制("Q"(,这样就不需要双引号了。使用此技术可以更容易地手动测试查询(如果需要的话(。顺便说一句,你的查询运行良好。

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;
/

相关内容

  • 没有找到相关文章

最新更新