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

Oracle PL/SQL 語言基礎完全指南:架構、語法、程式單元與實戰腳本庫

     編輯:Oracle 資料庫基礎

PL/SQL 核心優勢

  • 高效能交易處理,支援所有 DML/DDL(透過動態 SQL)。
  • 完整整合 SQL 資料型別、函數、物件型別。
  • 命名區塊存儲於資料庫,跨工具/應用重用,權限可控(GRANT/REVOKE)。
  • 純文字編輯,跨平台無縫移植。
  • 整塊送往伺服器,大幅降低網路往返(Context Switch)。

區塊結構

[DECLARE]          -- 宣告區:變數、常數、游標、例外、巢狀子程序
  declarations;
BEGIN               -- 執行區:可執行陳述式、巢狀區塊
  statements;
[EXCEPTION]         -- 例外處理區
  handlers;
END;
  • 每句以分號結束;註解 `--` 或 `/* */`。
  • 匿名區塊:無名稱,即時執行。
  • 命名區塊:Procedure/Function/Package/Trigger,編譯存儲於資料庫。

四大程式單元

類型回傳值呼叫方式典型用途
Function單一值SQL/PLSQL 運算式中計算、轉換、查詢封裝
Procedure無(OUT/INOUT 參數回傳)CALL/EXECUTE 或 PLSQL 區塊業務流程、批次作業、DML 封裝
Package—套件.子程序相關功能聚合、狀態保持、效能(整包載入)
Trigger—事件自動觸發稽核、衍生欄維護、複雜約束

變數與常數

v_name   VARCHAR2(30) := 'init';
c_pi     CONSTANT NUMBER := 3.14159;
v_sal    emp.sal%TYPE;          -- 錨定型別
v_row    emp%ROWTYPE;           -- 記錄型別
  • 賦值:`:=` 或 `SELECT ... INTO` / `FETCH ... INTO`。
  • `NOT NULL` 限制需同時初始化。

標量資料型別速查

LOB 大物件

  • BFILE(唯讀外部檔案)、BLOB(二進制)、CLOB(字元)、NCLOB(國際字元)。
  • 最大 4GB,隨機存取,透過 `DBMS_LOB` 操作,Locator 存表中指向實體。

控制結構

  • 條件:`IF-THEN-ELSE`、`IF-THEN-ELSIF-ELSE`、巢狀 IF。
  • 迴圈:`LOOP-EXIT WHEN`、`WHILE`、`FOR i IN [REVERSE] low..high`。
  • 標籤 `<

執行與除錯

-- SQL*Plus 執行匿名區塊
BEGIN ... END;
/
-- 執行存儲程序
EXEC proc_name(param);
-- 或在 PL/SQL 區塊直接呼叫
proc_name(param);
  • `SET SERVEROUTPUT ON` 顯示 `DBMS_OUTPUT`。
  • `DBMS_OUTPUT.PUT_LINE` 除錯列印。

常用 DBA 腳本速查

-- 1. 所有物件
SELECT * FROM tab;
-- 2. 結構複製空表
CREATE TABLE b AS SELECT * FROM a WHERE 1=2;
-- 3. 表空間使用率
SELECT tablespace_name, SUM(bytes)/1024/1024 total_mb,
       SUM(bytes)-SUM(NVL(free_bytes,0)) used_mb
FROM   dba_data_files df, (SELECT file_id, SUM(bytes) free_bytes FROM dba_free_space GROUP BY file_id) fs
WHERE  df.file_id = fs.file_id(+)
GROUP  BY tablespace_name;
-- 4. 回滾段狀態
SELECT segment_name, status FROM dba_rollback_segs;
-- 5. 資料檔路徑
SELECT file_name FROM dba_data_files ORDER BY file_id;
-- 6. 當前用戶
SHOW USER
-- 7. 計算器
SELECT 100*20 FROM dual;
-- 8. 字串串接
SELECT col1 || col2 FROM t1;  -- 或 CONCAT(col1,col2)
-- 9. 當前日期
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual;
-- 10. 跨用戶複製
COPY FROM u1/p1@db1 TO u2/p2@db2 CREATE t2 USING SELECT * FROM t1;
-- 11. 視圖排序用 GROUP BY 代替 ORDER BY
CREATE VIEW v AS SELECT b1,b2 FROM b GROUP BY b1,b2;
-- 12. 建用戶授權
GRANT CONNECT, RESOURCE TO test IDENTIFIED BY test;

CHAR vs VARCHAR2 選型指南

  • **CHAR**:固定長、頻繁更新長度變化大的欄位(避免 Row Migration)、極短代碼值(Y/N、M/F)。
  • **VARCHAR2**:可變長、節省空間、一般業務欄位首選。
  • VARCHAR 為 VARCHAR2 同義詞,**Oracle 不支援儲存空字串**(空字串視同 NULL),未來可能改變,建議直接用 VARCHAR2。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類別常用型別備註
數值NUMBER(p,s), BINARY_INTEGER, PLS_INTEGERPLS_INTEGER 機器運算最快
字串VARCHAR2(n), CHAR(n), CLOB, RAW, LONGVARCHAR2 節省空間;CHAR 固定長、效能略優
日期DATE, TIMESTAMP, INTERVALDATE 含時分秒,精度至秒
布林BOOLEAN僅 PL/SQL 可用,SQL 不支援