(1).PL/SQL對大小寫不是敏感的。
(2).字元類型:
CHAR:最大程度32767。
(3).快格式:
BEGIN
DECLARE
BEGIN
EXCEPTION
END
END
註:要是用了第一個BENGIN就一定要用第二個,反之亦然。
(4)注釋方法:
單行--This is a one-line comment
多行/*This is
is a
one-line comment
*/
(5)PL/SQL可以直接支援DML語言查詢,卻不支援DDL命令,你通常會使用PL/SQL維護在資料庫結構中的資料。但並不能維護這些結構。
(6)DECLARE
customer char(30);
fiscal_year number(2) NOT NULL:='97';
每一個變數的定義都必須以分號結束。
(7)聲明指標
DECLARE
cursor employee_cursor is
select * from employees;
指標與視圖類似,通過在PROCDURE部分使用LOOP(迴圈)。你可以翻閱指標。
(8)%TYPE屬性
%TYPE可以放回表中給定的變數屬性。
DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
id_num employees.emp_id%TYPE;
name employees.emp_name%TYPE;
(9)%ROWTYPE 屬性
變數不僅限於單一的數值,如果你所定義的變數與一個指標相關聯的話,你可以使用
%ROWTYPE 屬性來聲明變數與保證它與遊標所在行的類型相同.在ORACLE 的詞典中
%ROWTYPE
DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
employee_record employee_cursor%ROWTYPE;
分析:
在上例中定義了一個叫employee_record 的變數,%ROWTYPE 定義了這個變數的使它
與employee_cursor 所在行的資料類型相同這個%ROWTYPE 屬性定義的變數也稱為集合
變數.
%ROWCOUNT 屬性
在PL/SQL 中%ROWCOUNT 屬性可以保證在特定的SQL 陳述式塊中的遊標行數
DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
records_processed := employee_cursor%ROWCOUNT;
在上例中變數records_processed 將會返回PL/SQL 陳述式所訪問的employee_cursor 的行
數
警告:在定義變數的時候要小心以訪止它和表的名字相衝突,例如:如果你定義的變數與
你的PL/SQL 陳述式塊中所訪問的表的名字是相同的,那麼變數的名字會優先於表的名字
Procdure 部分
PROCDURE 部分是一個塊的主要部分,它包括條件陳述式和SQL
語句
BEGIN
open a cursor;
condition1;
statement1;
condition2;
statement2;
condition3;
statement3;
...
close the cursor;
END
指標控制命令
現在你將學習如何在PL/SQL 的語句塊中定義一個指標你需要知道如何來訪問一個
定義過的指標這一部分詮釋了基本的指標控制命令DECLARE OPEN FETCH 和
CLOSE
條件陳述式
IF condition1 THEN
statement1;
END IF;
IF condition1 THEN
statement1;
ELSE
statement2;
END IF;
IF condition1 THEN
statement1;
ELSIF condition2 THEN
statement2;
ELSE
statement3;
END IF;
LOOPS 迴圈
LOOP
WHILE-LOOP
FOR-LOOP
BEGIN
open employee_cursor;
LOOP
FETCH employee_cursor into employee_record;
EXIT WHEN employee_cursor%NOTFOUND;
statement1;
....
END LOOP;
close employee_cursor;
END;
DECLARE
cursor payment_cursor is
select cust_id, payment, total_due from payment_table;
cust_id payment_table.cust_id%TYPE;
payment payment_table.payment%TYPE;
total_due payment_table.total_due%TYPE;
BEGIN
open payment_cursor;
WHILE payment < total_due LOOP
FETCH payment_cursor into cust_id, payment, total_due;
EXIT WHEN payment_cursor%NOTFOUND;
insert into underpay_table
values (cust_id, 'STILL OWES');
END LOOP;
close payment_cursor;
DECLARE
cursor payment_cursor is
select cust_id, payment, total_due from payment_table;
cust_id payment_table.cust_id%TYPE;
payment payment_table.payment%TYPE
total_due payment_table.total_due%TYPE;
BEGIN
open payment_cursor;
FOR pay_rec IN payment_cursor LOOP
IF pay_rec.payment < pay_rec.total_due THEN
insert into underpay_table
values (pay_rec.cust_id, 'STILL OWES');
END IF;
END LOOP;
close payment_cursor;
END;
EXCEPTION 部分
啟用EXCEPTION (異常):RIASE
BEGIN
DECLARE
exception_name EXCEPTION;
BEGIN
IF condition THEN
RAISE exception_name;
END IF;
EXCEPTION
WHEN exception_name THEN
Statement;
END;
END;
異常的處理
EXCEPTION
WHEN exception1 THEN
statement1;
WHEN exception2 THEN
statement2;
WHEN OTHERS THEN
statement3;
SQL*PLUS