PL/SQL 程式設計簡介

來源:互聯網
上載者:User

PL/SQL 程式設計簡介

①PL/SQL 程式設計簡介

PL/SQL是一種進階資料庫程式設計語言,該語言專門用於在各種環境下對Oracle資料庫進行訪問。由於該語言整合於資料庫伺服器中,所以PL/SQL代碼可以對資料進行快速高效的處理

在PL/SQL中可以使用的SQL語句有:
INSERT,UPDATE,DELETE,SELECT …INTO,COMMIT,ROLLBACK,SAVEPOINT。
提示:在PL/SQL中只能用SQL語句中的DML 部分,不能用DDL 部分,如果要在PL/SQL中使用DDL(如CREATE  table  等)的話,只能以動態方式來使用

Oracle--plsql複合資料型別

--------------------------------------分割線 --------------------------------------

rlwrap - 解決Linux下SQLPLUS退格、上翻鍵亂碼問題

SQLPLUS spool 到動態記錄檔名

Oracle SQLPLUS提示符設定

通過設定SQLPLUS ARRAYSIZE(行預取)加快SQL返回速度

PL/SQL Developer實用技巧分享

--------------------------------------分割線 --------------------------------------

②PL/SQL塊結構和組成元素
PL/SQL程式由三個塊組成,即聲明部分、執行部分、異常處理部分

PL/SQL塊的結構如下:
   
    DECLARE 
    /* 聲明部分: 在此聲明PL/SQL用到的變數,類型及遊標,以及局部的預存程序和函數*/
    BEGIN
    /*  執行部分:  過程及SQL 陳述式, 即程式的主要部分*/
    EXCEPTION
    /* 執行異常部分: 錯誤處理*/
    END;

其中執行部分是必須的。
PL/SQL塊可以分為三類:
1. 無名塊:動態構造,只能執行一次。
2. 子程式:儲存在資料庫中的預存程序、函數及包等。當在資料庫上建立好後可以在其它程式中調用它們。
3. 觸發器:當資料庫發生操作時,會觸發一些事件,從而自動執行相應的程式。

③標識符
PL/SQL程式設計中的標識符定義與SQL 的標識符定義的要求相同。要求和限制有:
標識符名不能超過30字元;
第一個字元必須為字母;
不分大小寫;
不能用’-‘(減號);
不能是SQL保留字。

提示:  一般不要把變數名聲明與表中欄位名完全一樣,如果這樣可能得到不正確的結果

建議的命名方法:
標識符        命名規則  例子
程式變數 V_name          V_name
程式常量 C_Name          C_company_name
遊標變數 Name_cursor  Emp_cursor
異常標識 E_name          E_too_many
表類型        Name_table_type  Emp_record_type
表        Name_table  Emp
記錄類型 Name_record  Emp_record
替代變數 P_name          P_sal
綁定變數 G_name          G_year_sal

④變數類型
除了CHAR、VARCHAR2、BINARY_INTEGER、NUMBER(p,s)、LONG、DATE、BOOLEAN、ROWID、ROWID這些
還有複合類型
ORACLE 在PL/SQL 中除了提供象前面介紹的各種類型外,還提供一種稱為複合類型的類型---記錄和表

1)記錄類型
記錄類型是把邏輯相關的資料作為一個單中繼存放區起來,稱作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但邏輯相關的資訊。
定義記錄類型文法如下:
TYPE record_type IS RECORD(
Field1 type1  [NOT NULL]  [:= exp1 ],
Field2 type2  [NOT NULL]  [:= exp2 ],
. . .  . . .
Fieldn typen  [NOT NULL]  [:= expn ] ) ;

例:
1 自訂記錄類型

declare
  --定義一個記錄類型
  type customer_type is record(
    v_cust_name varchar2(20),
    v_cust_id number(10));

  --聲明自訂記錄類型的變數
  v_customer_type customer_type;
begin
  v_customer_type.v_cust_name := '劉德華';
  v_customer_type.v_cust_id := 1001;
 
  dbms_output.put_line(v_customer_type.v_cust_name||','||v_customer_type.v_cust_id);
end;

2 自訂記錄類型

declare
  --定義一個記錄類型
  type emp_record is record(
    v_name varchar2(25),
    v_email varchar2(25),
    v_salary number(8, 2),
    v_job_id varchar2(10));
   
  --聲明自訂記錄類型的變數
  v_emp_record emp_record;
begin
  --通過 select ... into ... 語句為變數賦值
 select last_name, email, salary, job_id into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 列印變數的值
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' || 
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);
end;

4. 使用 %type 定義變數,動態擷取資料的宣告類型

declare
  --定義一個記錄類型
  type emp_record is record(
    v_name employees.last_name%type,
    v_email employees.email%type,
    v_salary employees.salary%type,
    v_job_id employees.job_id%type);
   
  --聲明自訂記錄類型的變數
  v_emp_record emp_record;
begin
  --通過 select ... into ... 語句為變數賦值
 select last_name, email, salary, job_id into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 列印變數的值
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' || 
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);
end;


5. 使用 %rowtype

declare
--聲明一個記錄類型的變數
  v_emp_record employees%rowtype;
begin
  --通過 select ... into ... 語句為變數賦值
 select * into v_emp_record
 from employees
 where employee_id = 186;
 
 -- 列印變數的值
 dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' || 
                                        v_emp_record.salary || ', ' ||  v_emp_record.job_id  || ', ' || 
                                        v_emp_record.hire_date);
end;

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

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.