過程和函數
過程和函數都以編譯後的形式存放在數據庫中
pay_involume(invoice_nbr
函數以合法的表達式的方式調用
order_volumn:=open_orders(SYSDATE
創建過程的語法如下
CREATE [ OR REPLACE] PROCEDURE [schema
[parameter_lister]
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION
exception_section]
END [procedure_name]
每個參數的語法如下
paramter_name mode datatype [(:=|DEFAULT) value]
mode有三種形式
IN表示在調用過程的時候
OUT在調用過程時實際參數的取值都將被忽略
INOUT這種模式是IN和OUT的組合
創建函數的語法和過程的語法基本相同
CREATE [ OR REPLACE] FINCTION [schema
[parameter_list]
RETURN returning_datatype
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION]
exception_section
END [procedure_name]
在執行部分函數必須有喲個或多個return語句
在創建函數中可以調用單行函數和組函數
CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER)
RETURN NUMBER
IS
pi NUMBER=ACOS(
RadiansPerDegree NUMBER;
BEGIN
RadiansPerDegree=pi/
RETURN(SIN(DegreesIn*RadiansPerDegree));
END
包
包是一種將過程
打包的PL/SQL程序和沒有打包的有很大的差異
創建包必須首先創建包規范
CREATE [OR REPLACE] PACKAGE package_name
{AS|IS}
public_variable_declarations |
public_type_declarations |
public_exception_declarations |
public_cursor_declarations |
function_declarations |
procedure_specifications
END [package_name]
創建包主體使用CREATE PACKAGE BODY語句
CREATE [OR REPLACE] PACKAGE BODY package_name
{AS|IS}
private_variable_declarations |
private_type_declarations |
private_exception_declarations |
private_cursor_declarations |
function_declarations |
procedure_specifications
END [package_name]
私有數據結構是那些在包主體內部
觸發器(Triggers)
觸發器是一種自動執行響應數據庫變化的程序
DML事件
DDL事件
數據庫事件
DML事件觸發器可以是語句或行級觸發器
事件 觸發器描述
INSERT 當向表或視圖插入一行時觸發觸發器
UPDATE 更新表或視圖中的某一行時觸發觸發器
DELETE 從表或視圖中刪除某一行時觸發觸發器
CREATE 當使用CREATE語句為數據庫或項目增加一個對象時觸發觸發器
ALTER 當使用ALTER語句為更改一個數據庫或項目的對象時觸發觸發器
DROP 當使用DROP語句刪除一個數據庫或項目的對象時觸發觸發器
START 打開數據庫時觸發觸發器
SHUTDOWN 關閉數據庫時觸發
LOGON 當一個會話建立時觸發
LOGOFF 當關閉會話時觸發
SERVER 服務器錯誤發生時觸發觸發器
創建觸發器的語法如下
CREATE [OR REPLACE] TRIGGER trigger_name
{before|after|instead of} event
ON {table_or_view_name|DATABASE}
[FOR EACH ROW[WHEN condition]]
trigger_body
只有DML觸發器(INSERT
象約束一樣觸發器可以被設置為禁用或啟用來關閉或打開他們的執行體(EXECUTE)
ALTER TRIGGER trigger_name ENABLE;
ALTER TRIGGER trigger_name DISABLE;
要禁用或啟用表的所有觸發器
ALTER TRIGGER table_name DISABLE ALL TRIGGER;
ALTER TRIGGER table_name ENABLE ALL TRIGGER;
刪除觸發器使用DROP TRIGGER
DROP TRIGGER trigger_name;
數據字典
Oracle數據字典包含了用戶數據庫的元數據
數據字典視圖大致可以分為三類
在絕大多數數據字典視圖中都有象DBA_TABLES
視圖家族(View Family) 描述
COL_PRIVS 包含了表的列權限
EXTENTS 數據范圍信息
INDEXES 索引信息
IND_COLUMNS 索引列信息
OBJECTS 對象信息
ROLE_PRIVS 角色權限
SEGMENTS 表和索引的數據段信息
SEQUECNCES 序列信息
SOURCE 除觸發器之外的所有內置過程
SYNONYMS 別名信息
SYS_PRIVS 系統權限
TAB_COLUMNS 表和視圖的列信息
TAB_PRIVS 表權限
TABLES 表信息
TRIGGERS 觸發器信息
USERS 用戶信息
VIEWS 視圖信息
在Oracle中還有一些不常用的數據字典表
VIEW NAME 描述
USER_COL_PRIVS_MADE 用戶授予他人的列權限
USER_COL_PRIVS_RECD 用戶獲得的列權限
USER_TAB_PRIVS_MADE 用戶授予他人的表權限
USER_TAB_PRIVS_RECD 用戶獲得的表權限
其他的字典視圖中主要的是V$視圖
在大型系統上化幾周時間手工輸入每一條語句
手工輸入帶用戶名變量的語句
寫一條SQL語句
很明顯我們將選擇生成SQL的方法
例
SELECT
FROM DBA_USERS
WHERE username<>
AND temporary_tablespace<>
這個查詢的結果將被脫機處理到一個文件中
ALTER USER SYSTEM TEMPORARY TABLESPACE temp;
ALTER USER OUTLN TEMPORARY TABLESPACE temp;
ALTER USER DBSNMP TEMPORARY TABLESPACE temp;
ALTER USER SCOTT TEMPORARY TABLESPACE temp;
ALTER USER DEMO TEMPORARY TABLESPACE temp;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17206.html