PLSQL-动态声明变量

时间:2014-05-30 11:40:44

标签: oracle plsql

如何在PL / SQL中动态分配变量?

我尝试过这样的事情,但是不起作用:

declare
   v_variable number := execute immediate 'select max(value) from mytable';
begin
   dbms_output.put(v_variable);
end;

怎么可以这样做?

2 个答案:

答案 0 :(得分:2)

只需在代码正文中分配,而不是在声明中。此外,您还没有使用任何动态SQL,因此不需要EXECUTE IMMEDIATE ..

declare
   v_variable number;
begin

   select max(value) 
   into v_variable
   from mytable;

   dbms_output.put(v_variable);
end;

答案 1 :(得分:1)

您只能将变量值分配给代码中执行(开始后)部分的变量。例如,以下内容(取自https://stackoverflow.com/a/9957933/150533)交换来自两个变量的值:

declare
  no1 number(3):=31;
  no2 number(3):=34;
  temp number;
begin
  dbms_output.put_line('Before swap');
  dbms_output.put_line('No1 : '||no1||'  No2 : '||no2 );
  --  no1:=(no1+no2)-(no2:=no1);  generate error
  temp := no1;
  no1 := no2;
  no2 : temp;
  dbms_output.put_line('After swap');
  dbms_output.put_line('No1 : '||no1||'  No2 : '||no2 );
end;