使用IN子句立即执行

时间:2018-05-26 16:05:23

标签: sql oracle

我有声明,

EXECUTE IMMEDIATE 'INSERT INTO TABLE (SELECT * FROM SOMETABLE)';

它工作正常。

当我尝试将WHERE与IN子句一起使用时,它会抛出错误

EXECUTE IMMEDIATE 'INSERT INTO TABLE (SELECT * FROM SOMETABLE WHERE COLUMN_VALUE IN ('||'EMP'||','||'PEN'||','||'CWK'||') )';

我在这里做错了什么。 oracle中是否支持此功能?

1 个答案:

答案 0 :(得分:1)

您没有转义字符串值。您的直接解决方案是为IN列表中的值添加单引号。为此,您需要复制单引号(它会自行转义),因此查询如下所示:

EXECUTE IMMEDIATE 'INSERT INTO TABLE SELECT * FROM SOMETABLE WHERE COLUMN_VALUE IN (''' || 'EMP' || ''',''' || 'PEN'|| ''',''' || 'CWK'|| ''') ';

但是,您可能希望查看将值传递给查询的其他方法;修改字符串可能很危险,特别是如果它们是用户输入的话。

此外,SELECT不需要括号。而且,您应该列出INSERT的所有列。