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

如何将PL/SQL分配为变量的一部分,并在Oracle中作为查询字符串执行该变量,oracle,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

我有以下疑问:

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;
现在的问题是:

  • 它说PL/SQL已成功完成,但我希望将put_行中的vquery作为输出,它不会出现
  • 我只想通过最终运行以下命令来创建该表:

    执行即时查询

    我使用的是PL/sqldeveloper。 提前谢谢


  • 您可以尝试使用“定义”而不是“声明”:

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

    我对这一点不是百分之百的肯定,但我正在根据以下内容进行调整:。这里有两个很好的解决方案对我都适用。

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

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

    我对这一点不是百分之百的肯定,但我正在根据以下内容进行调整:。有两个很好的解决方案都对我有用。

    有一个小的语法错误,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;
    

    有一个小语法错误,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;
    

    我认为引号不正确-请尝试使用
    dbms_output.put_line('VQUERY is:'| | VQUERY)我能够成功执行,但vquery输出没有打印..使用pl/sql developer..有什么想法吗?我认为引号不正确-请尝试
    dbms_output.put_line('vquery为:'| | vquery)我能够成功执行,但是vquery输出没有打印..使用pl/sql developer..有什么想法吗?pl/sql过程成功完成。--我得到了这个,但是输出没有打印..@user2948533在pl/sql developer中,在
    声明
    完美之前,将设置为查看输出或尝试添加
    SET SERVEROUTPUT ON
    !我尝试将serveroutput设置为大小30000;。。它解决了…谢谢!PL/SQL过程已成功完成。--我正在获取此信息,但输出未打印。@user2948533在PL/SQL Developer中,将有一个设置来查看输出或尝试在
    声明
    完美之前添加
    SET SERVEROUTPUT ON
    !我尝试将serveroutput设置为大小30000;。。它解决了…谢谢!感谢您的帮助,SandPiper,似乎我缺少一个设置:将serveroutput设置为大小30000;。。感谢您的帮助,SandPiper,似乎我缺少一个设置:将serveroutput设置为大小30000;。。