Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在子句中立即执行_Sql_Oracle - Fatal编程技术网

Sql 在子句中立即执行

Sql 在子句中立即执行,sql,oracle,Sql,Oracle,我有这样的声明 EXECUTE IMMEDIATE 'INSERT INTO TABLE (SELECT * FROM SOMETABLE)'; 而且效果很好 当我尝试使用WHERE with IN子句时,它是抛出错误 EXECUTE IMMEDIATE 'INSERT INTO TABLE (SELECT * FROM SOMETABLE WHERE COLUMN_VALUE IN ('||'EMP'||','||'PEN'||','||'CWK'||') )'; 我做错了什么。oracl

我有这样的声明

EXECUTE IMMEDIATE 'INSERT INTO TABLE (SELECT * FROM SOMETABLE)';
而且效果很好

当我尝试使用WHERE with IN子句时,它是抛出错误

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

我做错了什么。oracle是否支持此功能

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

EXECUTE IMMEDIATE 'INSERT INTO TABLE SELECT * FROM SOMETABLE WHERE COLUMN_VALUE IN (''' || 'EMP' || ''',''' || 'PEN'|| ''',''' || 'CWK'|| ''') ';
但是,您可能希望查看将值传递到查询中的其他方法;咀嚼字符串可能很危险,特别是当它们是用户输入时


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

是的,比如使用123执行即时“更新员工”\u临时设置佣金\u pct=:x;为什么要使用
executeimmediate
进行简单的
INSERT
?如果只使用
INSERT-INTO-TABLE(选择…