在声明游标之前插入表中

时间:2012-08-01 13:44:54

标签: sql oracle plsql oracle-sqldeveloper

我可以使用带有来自EXECUTE IMMEDIATE中另一个表的select语句的值的insert语句吗?

喜欢:

execute immediate('insert into table values(select rowid from table where column='NEW')');

如果没有可能,我可以在过程中声明游标之前插入一个insert语句。

非常感谢。

2 个答案:

答案 0 :(得分:1)

是的,你可以,但你需要整理你的语法和引号:

execute immediate('insert into table (column_name) select rowid from table where column=''NEW'''); 

修改

更好的是,使用绑定变量而不是列名称的硬编码引用。

答案 1 :(得分:0)

测试时得到的结果是什么?

你的语法有点偏,但正如你在下面看到的,它绝对可行。

SQL> CREATE TABLE emp2 AS SELECT * FROM emp WHERE 1 = 0;

Table created.

SQL> BEGIN
  2      EXECUTE IMMEDIATE 'INSERT INTO emp2 (empno, ename, job) SELECT e.empno, e.ename, e.job FROM emp e WHERE e.deptno = 10';
  3  END;
  4  /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM emp2;

     EMPNO ENAME      JOB              MGR HIREDATE                    SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------------- ---------- ---------- ----------
      7782 CLARK      MANAGER
      7839 KING       PRESIDENT
      7934 MILLER     CLERK

SQL>