oracle系統包——dbms_pipe用法
dbms_pipe包用於在同一例程(例項)的不同會話之間進行通訊;注意,如果使用者要執行包dbms_pipe中的過程和函式,則必須要為使用者授權。
sql>conn sys/oracle as sysdba;
sql>grant execute on dbms_pipe to scott;
一、管道:
1)、公有管道:所有資料庫使用者可訪問。
2)、私有管道:只能建立管道的資料庫使用者可訪問。
二、dbms_pipe包的過程和函式解析
create_pipe:用於建立公用管道或私有管道。如果將引數private設定為true,則建立私有管道;如果設定為false,則建立公用管道。
eg:
declare
falg int;
begin
flag:=dbms_pipe.create_pipe('public_pipe',8192,false);
if flag=0 then
dbms_output.put_line('建立公用管道成功');
end if;
end;
/pack_message:用於將訊息寫入到本地訊息緩衝區
send_message:用於將本地訊息緩衝區中的內容傳送到管道
receive_message:用於接收管道訊息
如果該函式返回0,則表示管道沒有任何訊息;
如果返回6,則表示下一項的資料型別為number;
如果返回9,則表示下一項的資料型別為varchar2;
如果返回11,則表示下一項的資料型別為rowid;
如果返回12,則表示下一項的資料型別為date;
如果返回23,則表示下一項的資料型別為raw.
unpack_message:用於將訊息緩衝區的內容寫入到變數中.
remove_pipe:用於刪除已經建立的管道
puger:用於清除管道中的內容
reset_buffer:用於復位管道緩衝區
unique_session_name:用於為特定會話返回惟一的名稱,並且名稱的最長度為30位元組.
案例:1、建立乙個發訊息的過程:
create or replace procedure send_message(pipename varchar2,
message varchar2) is
flag number;
begin
flag := dbms_pipe.create_pipe(pipename);
if flag = 0 then
dbms_pipe.pack_message(message);
flag := dbms_pipe.send_message(pipename);
end if;
end;
/2、建立乙個接收訊息的包
create or replace procedure receive_message(pipename varchar2,
message out varchar2) is
flag number;
begin
flag := dbms_pipe.receive_message(pipename);
if flag = 0 then
dbms_pipe.unpack_message(message);
flag := dbms_pipe.remove_pipe(pipename);
end if;
end;
/3、執行包
--在乙個會話中執行:
exec send_message('pipe','i send message');
--在另一會話中執行:
var message varchar2(200);
exec receive_message('pipe',:message);
print message;
執行結果如下:
pl/sql procedure successfully completed
message
———i send message
oracle 包 及 包呼叫
建立包頭 create package testpack 建立乙個包頭,裡面定義變數和方法名稱,方法引數,返回值型別 is v tax number v s number function tax v money number return number function addd v a numb...
Oracle包的使用
包 例子 建立乙個計算器包 包的定義 像抽象類,只有定義 create or replace package cal as function addfun num1 number,num2 number return number function subfun num1 number,num2 n...
Oracle學習筆記 包
1 概念 包實際是一種封裝,裡面可以包含常量 函式 儲存過程等。1.1 宣告乙個包 create or replace package packageaboutcicle is 宣告常量 pi constant number 3.14 宣告函式 function f getc r number re...