在 Oracle 資料庫開發中,PL/SQL 程式區塊常被用來封裝複雜的業務邏輯。掌握在 PL/SQL 中正確執行 INSERT、UPDATE、DELETE 等 DML 操作,是開發高效預存程序與觸發器的基礎。本文將透過完整的程式碼範例,示範如何在宣告區定義變數、於執行區執行 DML,並妥善處理交易控制。
以下範例展示如何使用替代變數(&)接收使用者輸入,並將資料寫入 emp 表。注意:在 PL/SQL 中 & 會觸發輸入提示框,實際部署時建議改用參數傳遞。
DECLARE
v_empno emp.empno%TYPE := &empno;
v_ename emp.ename%TYPE := '&ename';
v_salary emp.sal%TYPE := &sal;
BEGIN
INSERT INTO emp (empno, ename, sal)
VALUES (v_empno, v_ename, v_salary);
COMMIT;
END;
/
關鍵點:使用 %TYPE 錨定型別可確保變數與資料欄位定義一致,避免型別不匹配錯誤。
更新操作需特別注意 WHERE 條件,避免誤更新整張表。範例中針對特定員工編號修改薪資:
DECLARE
v_empno emp.empno%TYPE;
v_salary emp.sal%TYPE := &sal;
BEGIN
UPDATE emp
SET sal = v_salary
WHERE empno = 1234;
COMMIT;
END;
/
最佳實務:生產環境中應避免硬編碼條件值(如 1234),改用變數或參數動態傳入。
刪除操作風險最高,務必確認 WHERE 子句精確鎖定目標列:
DECLARE
v_empno emp.empno%TYPE := &eno;
BEGIN
DELETE FROM emp
WHERE empno = v_empno;
COMMIT;
END;
/
安全建議:在刪除前先執行 SELECT 驗證將被刪除的資料筆數,或在程式中加入 SQL%ROWCOUNT 檢查影響列數。
上述範例均在 DML 後直接 COMMIT,實際開發中建議採用 SAVEPOINT 搭配例外處理區塊(EXCEPTION),以便在發生錯誤時回滾至特定點,保障資料一致性。
%TYPE 錨定型別提升程式碼維護性WHERE 條件COMMIT/ROLLBACK)應依業務邏輯妥善安排&),改用參數化介面熟練掌握這些基礎操作模式,能幫助你撰寫出健壯、可維護的 PL/SQL 程式單元。