首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle PL/SQL編程規範指南:大小寫、縮進、命名慣例、註釋與範本實戰

     編輯:Oracle 資料庫基礎

統一編碼風格提升可讀性、降低維護成本。五大規範維度:

一、大小寫規範

  • 大寫:關鍵字(BEGIN, EXCEPTION, IF THEN ELSE, LOOP)、資料型別(VARCHAR2, NUMBER)、內建函數(LEAST, SUBSTR)、使用者子程序(Procedure/Function/Package名)
  • 小寫:變數名、SQL欄位名、表名

二、空白與縮進

  • 等號/比較運算子左右各留一空格
  • 結構字(DECLARE, BEGIN, EXCEPTION, END, IF, END IF, LOOP, END LOOP)靠左對齊
  • 巢狀結構**縮進三個空格**(用Space鍵,非Tab)
  • 主要程式區塊間空行分隔
  • 同一結構不同邏輯分行(如IF與THEN同行,ELSE/END IF獨立行)

三、命名慣例(前綴制)

Package名描述功能域(如student_admin),Procedure名描述動作(remove_student),Function名描述回傳值(student_enroll_count)。

四、註釋規範

  • 解釋主要區塊與關鍵邏輯步驟
  • **單行註釋(--)優於多行(/* */)**:除錯時可部分取消註釋,多行註釋不可巢狀

五、其他建議

  • 嵌入SQL遵循相同格式化指引
  • 檔案頭註釋:用途、建立日期、作者、每版修訂記錄(作者/日期/描述)
  • 使用等寬字體(Courier New)編輯,對齊無誤

完整範本範例

REM ********************************************************
REM * 檔名:coursediscount01.sql
REM * 版本:1
REM * 用途:對至少有一班超過10學生登記的課程給予折扣
REM * 參數:無
REM * 作者:s.tashi  時間:2000-01-01
REM * 修改者:y.sonam  時間:2000-02-01
REM * 描述:修正游標,增加縮進與註釋
REM ********************************************************

DECLARE
  -- C_DISCOUNT_COURSE 找出至少有一班超過10學生登記的課程
  CURSOR c_discount_course IS
    SELECT DISTINCT course_no
    FROM section sect
    WHERE 10 <= (SELECT COUNT(*) FROM enrollment enr WHERE enr.section_id = sect.section_id);

  -- 費用超過$2000課程的折扣率
  con_discount_2000 CONSTANT NUMBER := .90;
  -- 費用$1001-$2000課程的折扣率
  con_discount_other CONSTANT NUMBER := .95;

  v_current_course_cost course.cost%TYPE;
  v_discount_all NUMBER;
  e_update_is_problematic EXCEPTION;

BEGIN
  -- 對於要打折的課程,確定當前費用與新費用
  FOR r_discount_course IN c_discount_course LOOP
    SELECT cost INTO v_current_course_cost
    FROM course
    WHERE course_no = r_discount_course.course_no;

    IF v_current_course_cost > 2000 THEN
      v_discount_all := con_discount_2000;
    ELSE
      IF v_current_course_cost > 1000 THEN
        v_discount_all := con_discount_other;
      ELSE
        v_discount_all := 1;
      END IF;
    END IF;

    BEGIN
      UPDATE course
      SET cost = cost * v_discount_all
      WHERE course_no = r_discount_course.course_no;
    EXCEPTION
      WHEN OTHERS THEN
        RAISE e_update_is_problematic;
    END;  -- 更新記錄子區塊結束
  END LOOP;  -- 主迴圈結束

  COMMIT;
EXCEPTION
  WHEN e_update_is_problematic THEN
    -- 交易回滾
    ROLLBACK;
    DBMS_OUTPUT.PUT_LINE('There was a problem updating a course cost.');
  WHEN OTHERS THEN
    NULL;
END;
/

遵循規範非為束縛,而是為團隊協作與長期維護鋪路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
前綴對象範例
v_變數v_emp_count
con_常數con_max_salary
i_ / o_ / io_輸入/輸出/雙向參數i_dept_id
c_ / _cur游標c_emp_cur
rc_Ref Cursorrc_dept
r_ / _recRecordr_emp_rec
type_ / _type使用者定義型別type_emp_rectype
t_ / _tabPL/SQL表t_emp_tab
e_自訂異常e_no_data_found