程序與函數均以編譯後形式儲存於資料庫。函數可有多參數並必須有回傳值;程序有零或多參數,無回傳值。兩者皆可透過參數列表傳入/傳出多值,主要差異在於呼叫方式:
PAY_INVOICE(INVOICE_NBR,30,DUEDATE);ORDER_VOLUME := OPEN_ORDERS(SYSDATE,30);CREATE [OR REPLACE] PROCEDURE [SCHEMA.]PROCEDURE_NAME
[PARAMETER_LIST]
{AS|IS}
DECLARATION_SECTION
BEGIN
EXECUTABLE_SECTION
[EXCEPTION
EXCEPTION_SECTION]
END [PROCEDURE_NAME];
CREATE [OR REPLACE] FUNCTION [SCHEMA.]FUNCTION_NAME
[PARAMETER_LIST]
RETURN RETURN_DATATYPE
{AS|IS}
DECLARATION_SECTION
BEGIN
EXECUTABLE_SECTION
[EXCEPTION
EXCEPTION_SECTION]
END [FUNCTION_NAME];
函數執行部需至少一 RETURN 陳述式。可呼叫單列函數與群組函數。
套件將程序、函數與資料結構封裝為單一單位,包含:
優點:
CREATE [OR REPLACE] PACKAGE PACKAGE_NAME {AS|IS}
PUBLIC_DECLARATIONS
END [PACKAGE_NAME];
CREATE [OR REPLACE] PACKAGE BODY PACKAGE_NAME {AS|IS}
PRIVATE_DECLARATIONS | IMPLEMENTATIONS
END [PACKAGE_NAME];
自動回應資料庫事件執行的程式。事件類型:
CREATE [OR REPLACE] TRIGGER TRIGGER_NAME
{BEFORE|AFTER|INSTEAD OF} EVENT
ON {TABLE|VIEW|DATABASE}
[FOR EACH ROW [WHEN CONDITION]]
TRIGGER_BODY
只有 DML 觸發器可用 INSTEAD OF;只有表 DML 觸發器可用 BEFORE/AFTER。
ALTER TRIGGER TRIGGER_NAME ENABLE|DISABLE;
ALTER TABLE TABLE_NAME ENABLE|DISABLE ALL TRIGGERS;
DROP TRIGGER TRIGGER_NAME;
儲存中繼資料。核心表 (OBJ$、UET$、SOURCE$) 由 SQL.BSQ 建立,CATALOG.SQL 建立視圖。視圖分三大前綴家族:
USER_*:當前用戶擁有的物件ALL_*:當前用戶可存取的物件DBA_*:全資料庫物件 (需 DBA 權限)| 視圖家族 | 說明 |
|---|---|
| COL_PRIVS | 欄位權限 |
| EXTENTS | Extent 資訊 |
| INDEXES | 索引資訊 |
| IND_COLUMNS | 索引欄位排序 |
| OBJECTS | 物件狀態、DDL 時間 |
| ROLE_PRIVS | 角色權限 |
| SEGMENTS | 段資訊 |
| SEQUENCES | Sequence 參數 |
| SOURCE | 程序/函數/套件原始碼 |
| SYNONYMS | 同義詞 |
| SYS_PRIVS | 系統權限 |
| TAB_COLUMNS | 表/視圖欄位定義 |
| TAB_PRIVS | 表權限 |
| TABLES | 表資訊 (表空間、儲存參數、列數) |
| TRIGGERS | 觸發器定義 |
| USERS | 用戶資訊 |
| VIEWS | 視圖定義 |
USER_COL_PRIVS_MADE/RECD:授出/獲授欄位權限USER_TAB_PRIVS_MADE/RECD:授出/獲授表權限基於 X$ 視圖,屬 SYS,提供 Instance 層級資訊 (非資料庫層級)。無 DBA 權限僅可見 USER/ALL 視圖。
SELECT 'ALTER USER '||USERNAME||' TEMPORARY TABLESPACE TEMP;'
FROM DBA_USERS
WHERE USERNAME <> 'SYS'
AND TEMPORARY_TABLESPACE <> 'TEMP';
-- 輸出導向檔案再執行,分鐘級完成大量變更