Oracle 變量 之 define variable declare 用法及區別


Oracle 變量 之 define variable declare 用法及區別

1 扯蛋

Oracle 提供了幾種不同的定義變量的方式: def(ine) ,var(iable), declare 分別適用於不同的環境.

define
sqlplus 環境(command窗口) 中用於定義變量, 適用於人機交互處理,或者sql腳本。
variable
plsql 匿名塊中使用。非匿名塊中不能使用。
declare
plsql 塊中使用,適用於匿名塊或者非匿名塊。

2 define和accept

define 可以定義一個變量,在調用該變量時使用符號 & . 人機交互給變量賦值時使用acc(ecpt)命令。

  • 作為查詢值示例

    define abc=1;
    select * from dual where rownum=&abc;
    

    執行結果如下:

    SQL>   define abc=1;
    SQL>   select * from dual where rownum=&abc;
    old   1:   select * from dual where rownum=&abc
    new   1:   select * from dual where rownum=1
    
    D
    -
    X
    
  • 作為變量傳入匿名塊示例
    • 與declare配合使用

      set serveroutput on
      define abc=1;
      declare abc varchar(2);
      begin
      select &abc into abc from dual;
      dbms_output.put_line(abc);
      end;
      /
      

      執行結果如下:

       SQL>  set serveroutput on
      SQL> define abc=1;
      SQL> declare abc varchar(2);
        2  begin
        3  select &abc into abc from dual;
        4  dbms_output.put_line(abc);
        5  end;
        6  /
      old   3: select &abc into abc from dual;
      new   3: select 1 into abc from dual;
      1
      
    • 與variable 配合使用

            set serveroutput on
      define abc=1;
      variable abc varchar2(10);
      begin
      :abc := &abc;
      dbms_output.put_line(:abc);
      end;
      /
      

      執行結果如下:

            SQL>  set serveroutput on
      SQL> define abc=1;
      SQL> variable abc varchar2(10);
      SQL> begin
        2  :abc := &abc;
        3  dbms_output.put_line(:abc);
        4  end;
        5  /
      old   2: :abc := &abc;
      new   2: :abc := 1;
      1
      
      PL/SQL procedure successfully completed.
      
  • 人機交互賦值示例 通過人機交互給變量賦值,需要使用acc(ept)

        SQL> acc i number prompt "Please input a number:"
    Please input a number:4
    SQL> select &i from dual;
    old   1: select &i from dual
    new   1: select          4 from dual
    
             4
    ----------
             4
    

3 variable

 

3.1 variable 特點

通過variable 定義變量,變量作用域為當前sqlplus環境。需要通過 : 來標記為變量。比如:

variable a varchar2(10);    -- 此時定義了變量,:a 代表了變量,而 a 並不是變量,只是字母 a
var current_scn number;
begin
    select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :current_scn from dual;
    dbms_output.put_line(' '||:current_scn);
end;
/

執行結果如下:

  SQL> var current_scn number;
SQL> begin
  2      select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :current_scn from dual;
  3      dbms_output.put_line(' '||:current_scn);
  4  end;
  5  /
13934393999029

PL/SQL procedure successfully completed.

下面的示例表明variable定義的變量在當前sqlplus環境中都可用。

  SQL> var a number;
SQL> begin
  2  select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select :a from dual;

        :A
----------
1.3947E+13

3.2 variable 與define配合使用

col scn for 9999999999999999999999
var a number;   -- 通過variable 定義變量
begin
-- 在匿名塊中給 :a 變量賦值
select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
end;
/
define current_scn = :a
select &current_scn as scn from dual;
  • 執行結果

      SQL> col scn for 9999999999999999999999
    SQL> var a number;
    SQL> begin
      2  select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into :a from dual;
      3  end;
      4  /
    
    PL/SQL procedure successfully completed.
    
    SQL> define current_scn = :a
    SQL> select &current_scn as scn from dual;
    old   1: select &current_scn as scn from dual
    new   1: select :a as scn from dual
    
                        SCN
    -----------------------
             13946807321486
    

4 declare

declare 定義變量后,變量標識符在整個塊結構內部都代表變量,在結構塊外部不可用, 也就是說 declare的作用域只是結構體內部。這點與variable定義變量不同。變量的調用方式也不一樣, declare定義的變量, 不需要添加任何額外的標記,而variable 定義的變量需要和冒號配合使用。

  • 示例

    set serveroutput on 
    declare current_scn number;
    begin
    -- 注意: into 后面的變量就是declare定義的變量    
         select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into current_scn from dual;
         dbms_output.put_line(current_scn);
      end;
      /
    
  • 執行結果

    SQL> set serveroutput on 
    SQL>  declare current_scn number;
      2      begin
      3      -- 注意: into 后面的變量就是declare定義的變量    
      4           select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER into current_scn from dual;
      5           dbms_output.put_line(current_scn);
      6        end;
      7        /
    13946807319270
    
    PL/SQL procedure successfully completed.
    

Author: halberd.lee

Created: 2019-07-04 Thu 15:03

Validate


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM