建立及管理獨立子程式
您可以建立和管理獨立 PL/SQL 子程式。
注意:若要執行本文件中的教學課程,您必須以 SQL Developer 的使用者 HR 身分連線到 Oracle Database。
關於子程式結構
子程式依循 PL/SQL 區塊結構;也就是說,它具有:
-
宣告部分 (選擇性)
宣告部份包含類型、常數、變數、例外、宣告游標與巢狀子程式的宣告。這些項目屬於子程式之部分,因此當子程式完成執行時,這些項目就不復存在。
-
執行檔部分 (必要)
可執行部分包含用來指派值、控制執行與操作資料的敘述句。
-
處理例外部分 (選擇性)
例外情況處理部份包含處理例外情況的代碼 (執行時期錯誤)。
註解會顯示在 PL/SQL 程式碼中的任何位置。PL/SQL 編譯器會忽略它們。在程式中新增註解可增加可讀性並協助理解。單行註解開始於雙連字號 (--),然後延伸到該行的結尾。多行註解以斜線和星號 (/*) 為開頭,以星號和斜線 (*/) 為結尾。
程序的結構為:
PROCEDURE name [ ( parameter_list ) ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
函數的架構與程序的架構類似,但它包含 RETURN 子句和至少一個 RETURN 敘述句 (以及超出此文件範圍的部分選擇性子句):
FUNCTION name [ ( parameter_list ) ] RETURN data_type [ clauses ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
-- at least one statement must be a RETURN statement
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
以 PROCEDURE 或 FUNCTION 開頭,且在 IS 或 AS 之前結束的代碼為子程式簽章。宣告、可執行檔以及異常狀況處理組件是由子程式主體所組成。異常狀況處理程式的語法位於關於異常狀況和異常狀況處理程式中。
另請參閱:Oracle Database PL/SQL Language Reference,瞭解子程式部分的詳細資訊
教學課程:建立獨立程序
本教學課程說明如何使用「建立程序」工具來建立名為 ADD_EVALUATION 的獨立程序,該程序會將列新增至 EVALUATIONS 表格中。
已在範例 4-1 中建立 EVALUATIONS 表格。
若要建立獨立程序,請使用 SQL Developer 工具「建立程序」或 DDL 陳述式 CREATE PROCEDURE。
使用「建立程序」工具建立獨立程序的步驟:
-
在「連線」框架中,展開 hr_conn 。
-
在綱要物件類型清單中,在程序上按一下滑鼠右鍵。
-
在選項清單中,按一下新建程序。
「建立程序」視窗便會開啟。
-
若為「綱要」,請接受預設值 HR。
-
若為「名稱」,請將 PROCEDURE1 變更為
ADD_EVALUATION。 -
按一下新增參數圖示。
資料欄標題下會出現一個資料列。其欄位具有下列預設值:名稱、PARAM1、模式、IN、無複製、已取消選取;資料類型、VARCHAR2;預設值、空白。
-
若為「名稱」,請將 PARAM1 變更為
EVALUATION_ID。 -
若為「模式」,請接受預設值 IN。
-
對於「資料類型」,請從功能表中選取 NUMBER 。
-
讓「預設值」維持空白。
-
然後按一下確定。
CREATE OR REPLACE PROCEDURE ADD_EVALUATION ( EVALUATION_ID IN NUMBER , EMPLOYEE_ID IN NUMBER , EVALUATION_DATE IN DATE , JOB_ID IN VARCHAR2 , MANAGER_ID IN NUMBER , DEPARTMENT_ID IN NUMBER , TOTAL_SCORE IN NUMBER ) AS BEGIN NULL; END ADD_EVALUATION;ADD_EVALUATION 窗格的標題為斜體字型,表示該程序尚未儲存在資料庫中。
由於程序的執行部分僅包含 NULL 陳述式,因此程序不會執行任何動作。
-
以此陳述式取代 NULL 陳述式:
INSERT INTO EVALUATIONS ( evaluation_id, employee_id, evaluation_date, job_id, manager_id, department_id, total_score ) VALUES ( ADD_EVALUATION.evaluation_id, ADD_EVALUATION.employee_id, ADD_EVALUATION.evaluation_date, ADD_EVALUATION.job_id, ADD_EVALUATION.manager_id, ADD_EVALUATION.department_id, ADD_EVALUATION.total_score );(限定參數名稱與程序名稱可確保它們不會與具有相同名稱的資料欄產生混淆。)
-
從「檔案」功能表中選取儲存。
在 Oracle 資料庫編譯程序並儲存它之後,字體字型中已不再包含 ADD_EVALUATION 窗格的標題。「訊息 - 日誌」窗格中的訊息為 Compiled。
另請參閱:
-
Oracle SQL Developer User's Guide,瞭解使用 SQL Developer 建立獨立程序的另一個範例
-
關於資料定義語言 (DDL) 敘述句,瞭解適用於 CREATE PROCEDURE 敘述句的一般資訊
-
Oracle Database PL/SQL Language Reference,瞭解 CREATE PROCEDURE 敘述句的相關資訊
教學課程:建立獨立函數
本教學課程說明如何使用「建立函數」工具來建立名為 CALCULATE_SCORE 的獨立函數,該函數具有三個參數並傳回類型為 NUMBER 的值。
若要建立獨立函數,請使用 SQL Developer 工具「建立函數」或 DDL 陳述式 CREATE FUNCTION。
使用「建立函數」工具建立獨立函數的步驟:
-
在「連線」框架中,展開 hr_conn 。
-
在綱要物件類型的清單中,在函數上按一下滑鼠右鍵。
-
在選項清單中,按一下新建函數。
「建立函數」視窗便會開啟。
-
若為「綱要」,請接受預設值 HR。
-
若為「名稱」,請將 FUNCTION1 變更為
CALCULATE_SCORE。 -
對於「退貨類型」,請從功能表中選取 NUMBER 。
-
按一下新增參數圖示。
資料欄標題下會出現一個資料列。其欄位具有下列預設值:名稱、PARAM1、模式、IN、無複製、已取消選取;資料類型、VARCHAR2;預設值、空白。
-
若為「名稱」,請將 PARAM1 變更為
cat。 -
若為「模式」,請接受預設值 IN。
-
對於「資料類型」,請接受預設值 VARCHAR2。
-
讓「預設值」維持空白。
-
然後按一下確定。
便會開啟 CALCULATE_SCORE 窗格,其中顯示建立函數的 CREATE FUNCTION 敘述句:
CREATE OR REPLACE FUNCTION CALCULATE_SCORE ( CAT IN VARCHAR2 , SCORE IN NUMBER , WEIGHT IN NUMBER ) RETURN NUMBER AS BEGIN RETURN NULL; END CALCULATE_SCORE;CALCULATE_SCORE 窗格的標題為斜體字型,表示該函數尚未儲存在資料庫中。
因為函數執行部分中的唯一陳述式是陳述式 RETURN NULL,所以此函數不會執行任何動作。
-
將空值取代為
score * weight。 -
從「檔案」功能表中選取儲存。
在 Oracle 資料庫編譯函數並儲存它之後,字體字型中已不再包含 CALCULATE_SCORE 窗格的標題。「訊息 - 日誌」窗格中的訊息為
Compiled。
另請參閱:
-
適用於 CREATE FUNCTION 敘述句的一般資訊之關於資料定義語言 (DDL) 敘述句
-
Oracle Database PL/SQL Language Reference,瞭解 CREATE FUNCTION 敘述句的相關資訊
變更獨立子程式
若要變更獨立子程式,請使用 SQL Developer 工具「編輯」或 DDL 陳述式 ALTER PROCEDURE 或 ALTER FUNCTION。
使用「編輯」工具變更獨立子程式的步驟:
-
在「連線」框架中,展開 hr_conn 。
-
在結構物件類型的清單中,展開函式或程序。
將會顯示函數或程序清單。
-
按一下要變更的函數或程序。
在 Connections 框架的右邊,邊邊會出現。它的頂端頁籤會顯示要變更的子程式名稱,「程式碼」窗格顯示建立子程式的程式碼。
「程式碼」窗格處於寫入模式。(按一下鉛筆圖示可將模式從寫入模式切換為唯讀,或切換為反向模式)。
-
在「程式碼」窗格中,變更程式碼。
窗格的標題變更為斜體字型,這表示在資料庫中尚未儲存該變更。
-
從「檔案」功能表中選取儲存。
在 Oracle 資料庫編譯子程式並儲存它之後,窗格的標題就不再是斜體字型。「訊息 - 日誌」窗格中的訊息為
Compiled。
另請參閱:
-
關於資料定義語言 (DDL) 敘述句,瞭解套用至 ALTER PROCEDURE 和 ALTER FUNCTION 敘述句的一般資訊
-
Oracle Database PL/SQL Language Reference,瞭解 ALTER PROCEDURE 敘述句的相關資訊
-
Oracle Database PL/SQL Language Reference,瞭解有關 ALTER FUNCTION 敘述句的資訊
教學課程:測試獨立功能
本教學課程顯示如何使用 SQL Developer 工具「執行」來測試獨立功能 CALCULATE_SCORE。
使用「執行」工具測試 CALCULATE_SCORE 函數的步驟:
-
在「連線」框架中,展開 hr_conn 。
-
在結構物件類型的清單中,展開函式。
-
在函數清單中,以滑鼠右鍵按一下 CALCULATE_SCORE 。
-
在選項清單中,按一下執行。
「執行 PL/SQL」視窗便會開啟,「執行 PL/SQL」視窗便會開啟,
v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => SCORE, WEIGHT => WEIGHT ); -
將 SCORE 和 WEIGHT 的值分別變更為
8和0.2:v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => 8, WEIGHT => 0.2 ); -
然後按一下確定。
在「程式碼」窗格下,會開啟「執行中」視窗,顯示下列結果:
Connecting to the database hr_conn. Process exited. Disconnecting from the database hr_conn.「執行中」頁籤右側是「輸出變數」頁籤。
-
按一下輸出變數頁籤。
「變數」和「值」會顯示兩個影格,分別包含 < 傳回值 > 和 1.6 的值。
另請參閱:Oracle SQL Developer User's Guide,瞭解有關使用 SQL Developer 執行和除錯程序和函數的資訊
刪除獨立子程式
若要刪除獨立子程式,請使用「SQL Developer 連線」框架與「刪除」工具,或 DDL 敘述句 DROP PROCEDURE 或 DROP FUNCTION。
注意:請勿刪除 ADD_EVALUATION 程序或 CALCULATE_SCORE 函數 — 您需要這些程序以供稍後教學課程使用。如果您想練習退課,請建立簡單課程,然後放下它們。
使用「退選」工具退選獨立子程式的步驟:
-
在「連線」框架中,展開 hr_conn 。
-
在結構物件類型的清單中,展開函式或程序。
-
在函數或程序清單中,在函數或程序的名稱上按一下滑鼠右鍵以刪除。
-
在選項清單中,按一下刪除。
-
在「刪除」視窗中,按一下套用。
-
在「確認」視窗中,按一下確定。
另請參閱:
-
關於資料定義語言 (DDL) 敘述句,瞭解適用於 DROP PROCEDURE 和 DROP FUNCTION 敘述句的一般資訊
-
Oracle Database SQL Language Reference,瞭解 DROP PROCEDURE 敘述句的相關資訊
-
Oracle Database SQL Language Reference,瞭解 DROP FUNCTION 敘述句的相關資訊