PL/SQL基礎
一、什麽是PL/SQL?
PL/SQL(Procedural Language/Structure Query Language) 是Oracle對標準sql規範擴展,它全面支持SQL的數據操作、事務控制等。
二、PL/SQL編寫規則
1.標識符命名規則
1)變量,建議使用v_作為前綴,如v_sal、v_job等
2)常量,建議使用c_作為前綴,如c_rate。
3)遊標,建議使用_cursor作為後綴,如emp_cursor
4) 異常,建議使用e_作為前綴,如e_integrity_error
5)當定義PL/SQL表類型時,建議使用_table_type作為後綴,如sql_table_type
6)當定義PL/SQL表變量時,建議使用_table作為後綴,如sal_table
7)當定義PL/SQL記錄類型時,建議使用_record_type作為後綴,如emp_record_type
8)當定義PL/SQL記錄變量時,建議使用_record作為後綴,如emp_record
2.大小寫規則
1)SQL關鍵字采用大寫格式,如SELECT UPDATE SET WHERE
2)PL/SQL關鍵字采用大寫格式,如DECLARE BEGIN END等
3)數據類型采用大寫格式,如INT VARCHAR2 DATE
4)標識符合參數采用小寫格式,如v_sal c_rate等
5)數據庫對象和列采用小寫格式,如emp sal ename等
三、PL/SQL編程結構
1、PL/SQL程序塊的基礎結構
DECLARE
-- 聲明部分 :用來定義變量 初始化變量等
BEGIN
-- 執行部分 用來執行查詢等操作部門
EXCEPTION
--用來處理異常部分
END;
/
1)聲明部門:主要用來聲明變量,常量,數據類型,遊標,異常處理名稱以及局部子程序定義等,這個部分是由DECLARE開始的
2)執行部門:這部分通過變量賦值、流程控制、數據查詢,數據操縱、數據定義等實現功能,由關鍵字BEGIN開始。
3)異常處理部分:處理異常或者錯誤
4)/ :PL/SQL程序塊需要使用正斜杠(/)結尾,才能執行。
註意點:
執行部分是必須的,聲明部分和異常部分是可選的
每個PL/SQL都是由BEGIN/DECLARE開始的,已END結束的
每條語句都必須以分號結束,sql語句可以是多行的,但是分號表示該語句的結束;另外一行中也可以有多條sql語句,他們之間以分號分隔。
示例代碼:
DECLARE
a NUMBER(4); -- 聲明一個變量
BEGIN
a:=1+2;
DBMS_OUTPUT.PUT_LINE(‘1+2=‘||a);--輸出變量值
EXCEPTION --異常處理
WEHN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘出現異常‘);
END;
/
解釋說明:DBMS_OUTPUT是oracle提供的系統包,PUT_LINE是該包所包含的過程,用於輸出字符串信息。在使用DBMS_OUTPUT包輸出數據或消息時,必須要將SQL*PLUS的環境變量SERVEROUT設置為ON
2.PL/SQL數據類型
對於PL/SQL程序來說,它的常量和變量的數據類型,除了使用與SQL相同的數據類型,還有特定類型
BOOLEAN 取值true false 或null
BINARY_INTEGER 帶符號整數
NATURAL BINARY_INTEGER的子類型,表示非負整數
NATURALN BINARY_INTEGER的子類型,不為null的非負整數
POSITIVE BINARY_INTEGER的子類型 , 表示正整數
POSITIVEN BINARY_INTEGER的子類型 ,表示不為null的正整數
SIGNTYPE BINARY_INTEGER的子類型 ,取值為-1、0或1
PLS_INTEGER PLS_INTEGER是專為PL/SQL程序使用的數據類型,它不可以在創建的表的列使用。PLS_INTEGER比NUMBER變量更小的表示範圍,占用 小。PL_INTEGER更有利於利用CPU
SIMPLE_INTEGER 11G新增類型,BINARY_INTEGER的子類型,取值範圍與BINARY_INTEGER相同,但不能為null值。在使用時如果內存溢出不會觸發
異常,只會簡單截斷結果。
STRING 與VARCHAR2相同
RECORD 一組其他類型的組合
REF CURSOR 指向一個行級的指針
3.變量和常量
1)
最常用的變量是標量變量。
variable_name data_type [not null :=default value];
variable_name 變量名稱
not null :可以對變量定義非空約束,如果使用了此選項,必須為變量賦值,並且在程序其他地方不能講變量修改為空
例子:
定義一個變量並給這個變量賦值為200
declare v_num number(4); begin v_num:=200; DBMS_OUTPUT.put_line(‘變量值為:‘||v_num); end; /
定義一個類型為NUMBER的變量v_num,並賦值為200,然後使用DBMS_OUT.put_line過程輸出v_num變量的值
2)常量
constant_name constant data_type {:=default}value;
constant_name 常量名
constant 定義常量的修飾符
data_type 常量的數據類型
:=|default 常量賦值,其中:=賦值操作符 冒號與等號之間不能有空格。
示例:
declare v_num constant number(4):=500; begin DBMS_OUTPUT.put_line(‘常量值為:‘||v_num); end; /
4、復合數據類型
復合數據類型主要由三種:%type %ROWTYPE 以及自定義記錄類型
1)%TYPE類型
有時候使用表中的數據給變量賦值,首先需要知道變量所對應類數據類型,否則無法確定變量的數據類型。使用%type可以解決這,%type用於隱式將變量的數據類型指定為對應列的數據類型。
格式:
var_name table_name.cloumn_name%type[not null]{:=|default}value
var_name 變量名
table_name 表名
cloumn_name 表中要賦值給變量的數據的數據列的名字
//使用%type關鍵字聲明變量類型v_name和v_deptno,並從employess表中查詢編號為200的員工姓名和部門編號
declare v_name employess.name%type; v_deptno employess.department_id%type; begin select name ,department_id into v_name,v_deptno from employess where employe_id=200; end; /
2)記錄類型
記錄類型是將一組邏輯類型相關的數據作為一個單元存儲起來,記錄類型可以理解為將多個類型的變量封裝起來定義一個類型叫做記錄類型的變量 然後使用相當於java類
,對象有多個屬性,通過類名.屬性名調用。但是必須包括一個普通的變量或者記錄數據類型的成員。使用記錄類型變量要先定義一個記錄類型機構的變量(通俗的理解就是先定義一個記錄類型的結構,),然後才可以聲明一個記錄類型的變量。定義記錄類型必須使用type語句,在語句中指出將在記錄中包含的字段以及數據類型。
語法:
type record_name is record(
field1_name data_type[not null] [:=default_value],
field2_name data_type[not null] [:=default_value];
)
record_name 自定義記錄數據類型名稱,如number
field1_name 記錄數據類型中的字段名
data_type:該字段的數據類型
示例:
定義一個名record_my_type的記錄類型,該記錄類型由字符串的v_name和整數的v_age變量組成,變量名為re_person
declare -- 定義了一個記錄數據類型結構的類型(相當於普通類型的number這種) type record_my_type record( v_name varchar, v_age number; ) --聲明記錄類型變量 re_person record_my_type; begin select name,age into re_person from tb_person where id=100; DBMS_OUTPUT.put_line(‘姓名:‘||re_person.v_name); DBMS_OUTPUT.put_line(‘年齡:‘||re_person.v_age); end; /
PL/SQL基礎