Oracle PL/SQL編程規範指南

來源:互聯網
上載者:User

一、PL/SQL編程規範之大小寫

就像在SQL中一樣,PL / SQL中是不區分大小寫。其一般準則如下:

關鍵字(BEGIN, EXCEPTION, END, IF THEN ELSE,LOOP, END LOOP)、資料類型(VARCHAR2, NUMBER)、內建函式(LEAST, SUBSTR)和使用者定義的子程式(procedures, functions,packages),使用大寫。

變數名以及SQL中的列名和表名,使用小寫。

二、PL/SQL編程規範之空白

空白空行和空格)在PL/SQL中如同在SQL中一樣重要,因為它是提高代碼可讀性的一個重要因素。換句話說,可以通過在代碼中使用縮排來體現程式的邏輯結構。以下是一些建議:

在等號或比較操作符的左右各留一個空格;

結構詞DECLARE, BEGIN, EXCEPTION, END,IF and END IF, LOOP and END LOOP)居左排列。另外,結構中的嵌套結構要縮排三個空格使用空格鍵,而不是Tab鍵);

主要程式碼片段之間用空行隔開;

把同一結構的不同邏輯部分分開寫在獨立的行,即使這個結構很短。例如,IF和THEN被放在同一行,而ELSE 和END IF則放在獨立的行。

三、PL/SQL編程規範之命名規範

使用以下首碼對於避免與關鍵字和表名列名相衝突是很有協助的:

v_變數名

con_常量名

i_輸入參數名,o_輸出參數名,io_輸入輸出參數名

c_遊標名 或者 遊標名_cur

rc_ Ref Cursor名

r_Record名 或者 Record名_rec

FOR r_stud IN c_stud LOOP…

FOR stud_rec IN stud_cur LOOP

type_名稱,名稱_type (使用者定義的類型)

t_表名,表名_tab PL/SQL 表)

rec_Record名,Record名_rec Record變數)

e_異常名 使用者定義的異常)

包的名稱應該描述包內的預存程序和函數主要所完成的功能

預存程序的名稱應該描述該預存程序所執行的動作

函數的名稱應該描述所返回的變數

例如:

PACKAGE student_admin

– admin 尾碼可能是用於表示管理功能.

PROCEDURE remove_student (i_student_id IN student.studid%TYPE);

FUNCTION student_enroll_count (i_student_id student.studid%TYPE)

RETURN INTEGER;

四、PL/SQL編程規範之注釋

PL/SQL中的注釋如同SQL中的注釋一樣重要。他們應該解釋程式的主要部分和所有關鍵的邏輯步驟。

使用單行注釋(–)而不是多行注釋(/*)。即使PL/SQL對這些注釋做同樣處理,這樣在程式碼完成後進行調試也會容易些,因為你不能在多行注釋中嵌入多行注釋。換句話說,單行注釋代碼中可以部分取消注釋,而在多行注釋代碼中則不行。

五、其他的建議

對於PL/SQL中嵌入的SQL聲明,使用相同的格式化指南來決定這些聲明應該如何在代碼塊中出現

提供一個頭部注釋,用於說明代碼塊的用途並列出建立日期和作者名字。並且每個修訂版都要有一行注釋,包含作者名、日期和修訂版描述。

例如:下面的這個樣本體現了上述建議。請注意該樣本還使用了等寬字型Courier New),因為每個字型佔據同等寬度可以使格式化更加簡便。等比例空格字型會隱藏空格使得行間對齊比較困難。多數文本和程式編輯器預設使用等寬字型。

 
  1. REM ********************************************************  
  2. REM * 檔案名稱:coursediscount01.sql  
  3. REM * 版本:1  
  4. REM * 用途:對於至少有一部分超過十個學生登記的課程給予折扣  
  5. REM * 參數:無  
  6. REM *  
  7. REM * 作者:s.tashi  時間:2000.1.1  
  8. REM * 修改者:y.sonam 時間:2000.2.1  
  9. REM * 描述:修正遊標,添加縮排和注釋。  
  10. REM ********************************************************  
  11. DECLARE 
  12. -- C_DISCOUNT_COURSE 找出那些至少有一部分超過十個學生登記的課程  
  13. CURSOR c_discount_course IS 
  14. SELECT DISTINCT course_no  
  15. FROM section sect  
  16. WHERE 10 <= (SELECT COUNT(*)  
  17. FROM enrollment enr  
  18. WHERE enr.section_id = sect.section_id  
  19. );  
  20. -- 費用超過 $2000.00的課程的折扣率  
  21. con_discount_2000 CONSTANT NUMBER := .90;  
  22. -- 費用在$1001.00和$2000.00之間的課程的折扣率  
  23. con_discount_other CONSTANT NUMBER := .95;  
  24. v_current_course_cost course.cost%TYPE;  
  25. v_discount_all NUMBER;  
  26. e_update_is_problematic EXCEPTION;  
  27. BEGIN 
  28. -- 對於那些要打折的課程, 確定當前費用和新的費用  
  29. FOR r_discount_course in c_discount_course LOOP  
  30. SELECT cost  
  31. INTO v_current_course_cost  
  32. FROM course  
  33. WHERE course_no = r_discount_course.course_no;  
  34. IF v_current_course_cost > 2000 THEN 
  35. v_discount_all := con_discount_2000;  
  36. ELSE 
  37. IF v_current_course_cost > 1000 THEN 
  38. v_discount_all := con_discount_other;  
  39. ELSE 
  40. v_discount_all := 1;  
  41. END IF;  
  42. END IF;  
  43. BEGIN 
  44. UPDATE course  
  45. SET cost = cost * v_discount_all  
  46. WHERE course_no = r_discount_course.course_no;  
  47. EXCEPTION  
  48. WHEN OTHERS THEN 
  49. RAISE e_update_is_problematic;  
  50. END; -- 更新記錄的子代碼塊結束  
  51. END LOOP; -- 主迴圈結束  
  52. COMMIT;  
  53. EXCEPTION  
  54. WHEN e_update_is_problematic THEN 
  55. -- 交易回復  
  56. ROLLBACK;  
  57. DBMS_OUTPUT.PUT_LINE  
  58. (’There was a problem updating a course cost.’);  
  59. WHEN OTHERS THEN 
  60. NULL;  
  61. END;  
  62. /  
  1. Oracle資料庫表串連方式及常見用法
  2. Oracle復原管理員應用淺析
  3. 使用Oracle外部表格的五個限制
  4. MySQL左串連、右串連和內串連詳解
  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.