PL/SQL 基础( 上 )
預備 ( PL/SQL 好處 )
Integration : 集成度高 ( server 和 application 中都有 , 例如 : Oracle Developer )
Improved performance : ( 必須系統中計算工時 , 如果使用 procedure , 則只需要傳幾個參數過去 , 可以很少的使用 network ,
而如果沒有使用 procedure , 則每條記錄的情況都要傳給SERVER, 假如公司有10000人 , 則就需要使用 network很多 )
Modularized program development : 使用模塊 ( begin ... end ) , Place reusable PL/SQL code in library to be shared between Oracle Form and Oracle Reports.
Portable , you can declare varibales . ( 可以復制到別的 SERVER 中執行 )
You can program with control structure . ( include handle errors )
匿名塊不保存在數據庫內部. ( block ) ( 執行完就沒有了 )
?
1.變量定義
變量種類 : PL/SQL變量,系統綁定變量
PL/SQL變量 : scalar , composite , reference , LOB ( large objects ) ( 在此 只討論 scalar , composite )
系統綁定變量 : 定義在外部環境 ( i*SQL ) 中,可以用做參數傳遞的變量。
?
identifier [CONSTANT] datatype [NOT NULL] [:= | default exp];
例如 :
declare
v_depno number(3) NOT NULL := 100; ( 有 NOT NULL 必須給值 )
c_comn CONSTANT number(4) := 1400; ( 有 CONSTANT 必須初始化 )
v_location varchar(20) := “Hello'’world”( 如果字符串中有’,那么必須兩次使用,成對出現 )
%TYPE ( 前面定義過的變量,或者是TABLEZ中的列 )
%ROWTYPE
v_name employees.last_name%TYPE
v_balance number(10,2) ;
v_min_balance v_balance%TYPE := 10;
v_ename := LOWER( v_ename ) ;? 可以使用函數
字符串問題,例如 tom’s home
v_home = q’!tom’s home!’ 或者 q’[! tom’s home ]’其中主要格式為 q’分隔符,例如! [] 等等
當然,因為限定成對出現,所以如果你寫 “tom'’s home” 也是可以的。
declare 聲明部分的變量在執行語句中不需要加 : 冒號 例如:
1: DECLARE 2: v_bonus NUMBER(6); 3: BEGIN 4: SELECT salary * 0.01 5: INTO v_bonus -- 注意此處沒有冒號 6: FROM employees 7: WHERE EMP_ID = '2008491'; 8: END;Bind variables : 變量是在 host environment中定義,主要是提供參數給 PL/SQL BLOCK
系統綁定變量,可以通過 print 顯示內容, 例如 PRINT g_n ,
VARIABLE return_code NUMBER ( 可以直接在PL/SQL中使用,不用再 declare , 此種變量必須要冒號 :
1: VARIABLE g_salary NUMBER 2: BEGIN 3: SELECT salary 4: INTO :g_salary -- 注意此處有冒號 5: FROM EMPLOYEES 6: WHERE EMPLOYEE_ID = '20080504'; 7: END;PLSQL variables assignments always use :=
SQL column assignments always use =
不可以在 PL/SQL 中使用的函數 :
- DECODE
- GROUP functions ( AVG, MIN, MAX, COUNT, SUM, STDDEV, VARIANCE )
? group functions apply to groups of rows in a table and therefore are availiable only in SQL statements in a PL/SQL block.
? 也就是說,在PL/SQL中的SQL中可以使用以上函數。
2. 命名規則
| identifier | Naming Convention | Example | 
| variable | v_name | v_sal | 
| constant | c_name | c_company_name | 
| cursor | name_cursor | emp_cursor | 
| exception | e_name | e_too_many | 
| table type | name_table_type | amount_table_type | 
| table | name_table | country_table | 
| record type | name_record | customer_record | 
| record | name_record | customer_record | 
| substitution | p_name | p_sal | 
| host or bind variable | g_name | g_year_sal | 
3. 輸出
DBMS_OUTPUT.PUT_LINE()
4. 注釋
-- 單行注釋
/**/ 多行注釋
5. scope
同 C 一樣, PL/SQL 中的變量也是有 SCOPE 的
6. 運行
/ A slash( / ) runs the PL/SQL block in a script file or in some tools such as isql*plus.
7. 在 PL/SQL 中使用函數
v_ename := LOWER( v_ename) ;
Most of the SQL function can bu used in PL/SQL ,
PL /SQL has its own error handling functions which are : ( SQLCODE, SQLERRM )
8. Qualify an identifier
標識符可以使用 label 區分
注意 : 上邊的 outer.birthdate ( 這樣在內部的 begin end , 可以訪問外部變量 )
9. 特殊的操作符號
** 冪運算
~= 約等于
<>, != , ^= 不等于
轉載于:https://www.cnblogs.com/moveofgod/archive/2012/11/16/2773279.html
總結
以上是生活随笔為你收集整理的PL/SQL 基础( 上 )的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 程序员到项目经理:从内而外的提升不看后悔
- 下一篇: MSDP协议概述
