Oracle 變量 之 define variable declare 用法及區別
Table of Contents
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 ¤t_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 ¤t_scn as scn from dual; old 1: select ¤t_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.
Created: 2019-07-04 Thu 15:03