我有声明,
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中是否支持此功能?
答案 0 :(得分:1)
您没有转义字符串值。您的直接解决方案是为IN
列表中的值添加单引号。为此,您需要复制单引号(它会自行转义),因此查询如下所示:
EXECUTE IMMEDIATE 'INSERT INTO TABLE SELECT * FROM SOMETABLE WHERE COLUMN_VALUE IN (''' || 'EMP' || ''',''' || 'PEN'|| ''',''' || 'CWK'|| ''') ';
但是,您可能希望查看将值传递给查询的其他方法;修改字符串可能很危险,特别是如果它们是用户输入的话。
此外,SELECT
不需要括号。而且,您应该列出INSERT
的所有列。