Oracle系統包 DBMS PIPE用法

2021-07-27 17:29:59 字數 2069 閱讀 4239

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...