使用立即执行编写动态 SQL 查询

问题描述 投票:0回答:2

我写了一段 PLSQL 代码,我试图在其中引入立即执行语句 但需要动态创建 SQL 语句

下面是我的以下声明,其中有些内容没有被执行

tblname := 'emp';
v_tbl   := 'emp_123';

execute immediate 'CREATE TABLE' || tblname || '  AS select * from ' || v_tbl; 

任何解决方案都非常感谢

oracle plsql
2个回答
3
投票

您尚未声明变量的数据类型,并确保 emp_123 表在架构中可用。以下是示例代码:

DECLARE

  Tblname VARCHAR2(6) := 'emp';
  v_Tbl   VARCHAR2(9) := 'emp_123';
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE ' || Tblname || '  AS select * from ' || v_Tbl;
END;

0
投票

虽然 @sachin-padha 提供的答案应该是正确的,但我想指出 OT 代码的真正问题:

'CREATE TABLE' || tblname
在关键字
 
和注入的表名称之间缺少
TABLE

所以执行的语句如下所示:
CREATE TABLEemp  AS select * from emp_123

这会产生
ORA-00901: invalid CREATE command
异常

© www.soinside.com 2019 - 2024. All rights reserved.