ORACLE PL/SQL

來源:互聯網
上載者:User

(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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.