有用的死循环:
通过管道传递信息打破循环,涉及两个同用户登录的sqlplus窗体,一个执行循环,另一个用来打破循环:
循环体:receive_message
--在SQL*PLUS 中声名一个变量 variable message varchar2(20); create or replace procedure receive_message(pipename in varchar2,message out varchar2) is l_num pls_integer := 0; flag pls_integer; begin loop l_num := l_num + 1; if l_num > 10 then l_num := 0; end if; dbms_lock.sleep(3); dbms_output.put_line(l_num || 'Hello World!'); if dbms_pipe.receive_message(pipename,0) = 0 then dbms_pipe.unpack_message(message); exit when message = 'stop'; end if; end loop; flag := dbms_pipe.remove_pipe(pipename); end receive_message;
传递信息的过程:send_message
create or replace procedure send_message(pipename in varchar2,message in varchar2) is flag pls_integer; 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 send_message;
Syntax
dbms_pipe.create_pipe(
pipename in varchar2,
maxpipesize in integer default 8192,
private in boolean default true)
return integer
This function explicitly create a public or private pipe.If the private flag is TRUE, then the pipe creator is assigned as the owner of the private pipe. Explicitly-created pipes can only be removed by calling remove_pipe, or by shutting down the instance.