如何将PL / SQL作为变量的一部分进行分配,并将该变量作为Oracle中的查询字符串执行

时间:2017-06-19 02:27:30

标签: oracle

我有以下查询:

DECLARE vquery Varchar2(5000) := 'CREATE TABLE  MYSCHEMA.MyTable ( ID INTEGER NOT NULL, Badge INTEGER NOT NULL,Password NVARCHAR2(50),PRIMARY KEY (ID))' ;

Begin
--EXECUTE IMMEDIATE vquery;--This is what I want to execute
dbms_output.put_line('VQUERY is: '' || vquery || ');--Just wanted to test
End;

现在的问题是:

  1. 说PL / SQL已经成功完成,但是我希望看到put_line中的vquery作为输出,它不会出现。
  2. 我想要的是通过最终运行来创建该表:

    EXECUTE IMMEDIATE vquery;

    我正在使用PL / SQL Developer。 提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用DEFINE而不是DECLARE:

DEFINE vquery = 'CREATE TABLE  MYSCHEMA.MyTable ( ID INTEGER NOT NULL, - 
    Badge INTEGER NOT NULL, Password NVARCHAR2(50),PRIMARY KEY (ID))'

&vquery;

我不是100%肯定这个,但我正在调整它:Define a VIEW in Oracle without using CREATE。有几个很好的解决方案都适用于我。

答案 1 :(得分:0)

有一个小的语法错误,vquery是一个字符串,因为你将变量作为字符串的一部分包含在内

DBMS_OUTPUT.put_line ('VQUERY is: ' || vquery); 

而不是

DBMS_OUTPUT.put_line('VQUERY is: '' || vquery || ');

所以试试

DECLARE
   vquery   VARCHAR2 (5000);
BEGIN
   vquery :=
      'CREATE TABLE  MyTable ( ID INTEGER NOT NULL, Badge INTEGER NOT NULL,Password NVARCHAR2(50),PRIMARY KEY (ID))';

   --EXECUTE IMMEDIATE vquery;--This is what I want to execute
   DBMS_OUTPUT.put_line ('VQUERY is: ' || vquery);       --Just wanted to test
END;