匿名plsql程式:
1.用文字編輯器書寫**,在sql*plus中執行。
2.**可以儲存在檔案系統中。
3.不能被其他程式呼叫,也不能被其他使用者執行。
4.不能接受引數,也不能傳遞引數。
命名pl/sql程式:
儲存:1.以編譯物件的方式儲存在資料庫中。2.以庫檔案的方式儲存在檔案系統中。
能被其它程式呼叫。
能被其他使用者執行。
伺服器端:1.以資料庫物件的方式儲存在資料庫中。2.在伺服器上執行。
客戶端:1.儲存在客戶端的檔案系統中。2.在客戶端執行。
命名pl/sql程式型別:
程式單元(儲存在客戶端或伺服器段)1.過程(procedures),2.函式(functions)
庫檔案(libraries儲存在客戶端)
包(packages儲存在客戶端或伺服器端)
觸發器(triggers儲存在伺服器端)
程式單元:
過程(procedures):1.可以接受和傳遞多個引數。2.可以呼叫其它程式單元。
函式(functions):與過程類似,但必須有乙個返回值。
引數:1.用於向程式單元傳入或程式單元用於傳出資料的變數。
2.在過程的頭部進行宣告。
3.呼叫過程時,呼叫者要向被呼叫的過程傳遞引數值。
引數的模式:
1.傳入引數(in):用於向過程傳入資料,唯讀型。
2.傳出引數(out):用於接收過程輸出資料,只寫型。
3.傳入傳出引數(in out):既可以i向過程傳入資料,也可以接受過程傳出資料,可讀可寫型。
建立過程:
create or replace procedure procedure_name
(parameter1 mode datatype,
parameter2 mode datatype,...
)is | as
local variable declarations
begin
program statements
exception
exception handlers
end;
引數的型別:
形式引數:在過程頭部宣告。
實際引數:由過程呼叫者在施用時提供。
兩者要匹配型別、數量和順序
在sql/plus中除錯程式:
1.定位出錯的程式行並糾正錯誤。
2.用show errors命令檢視出錯的詳細資訊。
3.dbms_output.put_line命令輸出中間結果,以此來跟蹤程式的流程。
建立函式:
create or replace function function_name
(parameter1 mode datatype,
parameter2 mode datatype,...)
return function_return_data_type
is local variable declarations
begin
program statements
return return_value;
exception
exception handlers
return exception_notice;
end;
return 命令:
1.在函式頭部的return命令用於定於函式返回值得型別。
2.在函式體的return命令用於傳遞函式的實際返回值。
3.retuen exception_notice返回函式呼叫過程中的出錯資訊。
函式呼叫:
1.可以被其它過程和函式或匿名pl/sql塊呼叫。
2.也可以再sql語句中進行呼叫
return_value := function(parameter1_value,....);
儲存單元的物件許可權:
1.儲存程式單元可以看做是乙個資料庫物件。
2.要允許其它使用者使用你的程式單元,必須給該使用者授予excute許可權。
使用其他使用者下的儲存單元:
1.你必須被授予相應的執行許可權。
2.呼叫時在物件名前加上該物件所有者的使用者名稱
return_value:=lhoward.my_function to_date('01/02/1112','mm/dd/yyyy');
呼叫其他使用者的過程:
使用過程名稱,並為之提供相應的引數值的列表:procedure_name(parameter1_value, parameter2_value...);
程式單元的依賴性:
物件依賴:程式單元依賴於它所引用的資料庫物件(表,檢視,序列等。。。)
程式依賴:程式單元依賴於它所呼叫的其它程式單元。
直接依賴和間接依賴:
直接依賴:直接呼叫的程式或引用的資料庫物件。
間接依賴:通過子程式呼叫的程式或引用的資料庫物件。
有效性驗證:如果乙個資料庫物件或程式單元發生了改變,則引用該物件或者呼叫該程式單元的程式
必須要重新進行編譯。
包:1.儲存在伺服器端的程式庫,2.包含,全域性變數的宣告,游標的定義,過程,函式。
2.庫總是執行在客戶端。3.包總是執行在伺服器端。
包的組成:
定義部分:用於宣告所有的公共變數,游標,過程和函式。
包體部分:過程和函式的**。
基本原理:1.定義部分對使用者是可見的,說明如何使用包。2.包體部分是不可見的,使用者不會關心具體的**
在pl/plus中建立包
create or replace package package_name is
variable_name datatype;
prodedure procedure_name(parameter_list)
function function_name(parameter_list);
end;
呼叫包中的程式單元:
在過程名前加上其所在的包和名稱:package_name.program_unit_name(parameter_list);
例如:dbms_output.put_line('hello world');
程式的過載:
過載:1.多個程式單元具有相同的名稱,但接受不同的資料和型別的引數。
2.允許使用者使用相同的命令,通過提供不同的引數,完成不同的呼叫請求。
Oracle 子程式內聯
start 如果子程式 a 呼叫 b,內聯可以把 b 的 合併到 a 中,從而減少子程式呼叫,提高效能,下面是乙個簡單的例子。子程式 a procedure a isbegin 指定下面的子程式 b 內聯 pragma inline b,yes b 1 注意此處的子程式不會內聯 b 2 end a ...
(oracle)如何建立和使用procedure
1 定義procedure 在高階程式語言中的模組的概念 create or replace procedure procedure name param 1 in type param 2 in out type as param inner type begin statement end a ...
Oracle中的子程式和包
在oracle中通過使用子程式和包將pl sql 封裝起來,從而實現模組化,在以後的呼叫中可以多次復用,而不受前台語言的限制,同時通過用子程式和包將pl sql 封裝起來,有利於提高開發效率和執行效率,但是維護性卻沒有物件導向靈活,如果乙個子程式受到影響,就需要修改該子程式的定義。在oracle中子...