更新時間:2021-03-16 17:25:36 來源:動力節點 瀏覽1573次
我們在編寫PL/SQL程序時,可以定義變量和常量。在PL/SQL程序中的變量包括有標量類型(scalar)、復合類型(composite)、參照類型(references)、lob(large object)。下面我們來具體分析PL/SQL變量的使用和定義。
1、標量(scalar)
在編寫PL/SQL塊時,如果要使用變量,需要在定義部分定義變量。
PL/SQL中定義變量和常量的語法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier:名稱
constant:指定常量。需要指定它的初始值,其其值是不能改變的。
datatype:數據類型
not null:指定變量值不能為NULL
:=:給變量或是常量指定初始值
default:用于指定初始值
expr:指定初始值PL/SQL表達式,可是文本值、其他變量、函數等。
標量定義的案例
(1)定義一個變長字符串
v_ename varchar2(10);
(2)定義一個小數,范圍-9999.99~9999.99
v_sal number(6,2);
(3)定義一個小數并給一個初始值為5.4 :=是PL/SQL的賦值號
v_sal2 number(6,2):=5.3;
(4)定義一個日期類型的數據
v_hiredate date;
(5)定義一個布爾變量,不能為空,初始值為false
v_valid boolean not null default false;
A、使用標量
在定義好變量后,就可以使用這些變量。這里需要 說明的是PL/SQL塊為變量賦值不同于其他的編程語言,需要在等號前面加冒號(:=)。
下面以輸入員工號,顯示雇員姓名、工資、個人所得稅(稅率為0.03)為例,說明變量的使用,看看如何編寫。d
eclare
c_tax_rate number(3,2):=0.03;
v_ename varchar2(5);
v_sal number(7,2);
v_tax number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工資是:'||v_sal||' 所得稅是:'||v_tax);
end;
B、使用%type類型
對于上面的PL/SQL塊有一個問題:
就是如果員工的姓名超過了5字符的話,就會有錯誤,為了降低PL/SQL程序的維護工作量,可以使用%type屬性定義變量,這樣它會按照數據庫列來確定你定義的變量的類型和長度。
語法:標識符名 表名.列名%type;
案例:
declear
c_tax_rate number(3,2):=0.03;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工資是:'||v_sal||' 所得稅是:'||v_tax);
end;
2、復合變量(composite)
用于存儲多個值的變量。主要包括這幾種PL/SQL記錄、PL/SQL表、嵌套表、varray。
1)PL/SQL記錄
類似于高級語言中的結構體,需要注意的是,當引用PL/SQL記錄成員時,必須要加記錄變量作為前綴(記錄變量.記錄成員)。
案例:
declare
type emp_record_type is record(name emp.ename%type, salary emp.sal%type,title emp.job%type);
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('員工名:'||sp_record.name);
end;
2)PL/SQL表
相當于高級語言中的數組,但是需要注意的是在高級語言中數組的下標不能為負數,而PL/SQL是可以為負數的,并且表元素的下標沒有限制。
案例:
declare
type sp_table_type is table of emp.ename%type index by binary_integer;
sp_table sp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('員工名:'||sp_table(0));
end;
說明:
sp_table_type:是PL/SQL表類型
emp.ename%type:指定了表的元素的類型和長度
sp_table:是PL/SQL表變量
sp_table(0):表示下標為0的元素
3、參照變量
概述:參照變量是指用于存放數值指針的變量,通過使用參照變量,可以使得應用程序共享相同對象,從而降低占用空間。在編寫PL/SQL程序時,可以使用游標變量(ref cursor)和對象類型變量(ref obj_type)兩種參照變量類型。
使用游標時,當定義游標時不需要指定相應的select語句,但是當使用游標時(open時)需要指定select語句,這樣一個游標就與一個select 語句結合了。
案例:
請使用PL/SQL編寫一個塊,可以輸入部門號,并顯示該部門所有員工姓名和他的工資
declare
type sp_emp_cursor is ref cursor;
test_cursor sp_emp_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type
begin
opent test_cursor for select ename,sal from emp where deptno=&no;
loop
fetch test_cursor into v_ename,v_sal;
exit when test_cursor%notfound
dbms_output.putline('姓名:'||v_ename||' 工資:'||v_sal);
endloop;
close test_cursor;
end;
熟練掌握PL/SQL中的變量使用和定義是我們學習PL/SQL的基本要求之一,這些變量的定義和使用能夠有效地幫助我們解決許多開發中遇到的問題,結合本站的PL/SQL教程中的其他內容,我們基本上能夠獨立完成使用PL/SQL在Oracle數據庫中進行一些基本的操作和開發了。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習