【问题标题】:inserting in table before declaring cursor在声明游标之前插入表中
【发布时间】:2012-08-01 13:44:54
【问题描述】:

我可以将插入语句与来自EXECUTE IMMEDIATE 中另一个表上的 select 语句的值一起使用吗?

喜欢:

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

如果没有这种可能性,我可以在过程中声明游标之前放置一个插入语句吗?

非常感谢。

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 使用反斜杠...也许 column=\'NEW\'
  • "如果不可能,我可以在过程中的游标声明之前放置一个插入语句。" -> 是否要在通过基于该表的游标之前将记录插入到表中?

标签: sql oracle plsql oracle-sqldeveloper


【解决方案1】:

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

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

编辑:

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

【讨论】:

  • 非常感谢大家.. 无法像使用电话一样键入正确的语法。谢谢
  • 立即执行不需要(括号
  • @a_horse_with_no_name,你是对的(我注意到我也错过了右括号),这不是必需的,但我通常会将它们作为视觉分隔符包含在正在执行的语句中。
【解决方案2】:

你测试的时候得到了什么结果?

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

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>

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2019-04-15
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多