WEB开发网
开发学院数据库Oracle Oracle存储过程中任务和管道的应用 阅读

Oracle存储过程中任务和管道的应用

 2007-05-12 12:26:56 来源:WEB开发网   
核心提示: 4. 代码执行4.1. 执行过程在CMD行输入 sqlplus 根据提示登录设定DBMS_OUTPUT可见SQL> set serveroutput ON以下是执行过程和相应的返回信息SQL> call beginmaxpro();队列号码JOB=21调用完成,SQL>

4. 代码执行

4.1. 执行过程

  在CMD行输入 sqlplus 根据提示登录
  设定DBMS_OUTPUT可见
  SQL> set serveroutput ON
  以下是执行过程和相应的返回信息
  SQL> call beginmaxpro();
  队列号码JOB=21
  调用完成。
  SQL> call readmaxpro();
  maxpro 的当前进行状态为14
  调用完成。
  SQL> call readmaxpro();
  maxpro 的当前进行状态为16
  调用完成。
  SQL> call readmaxpro();
  maxpro 的当前进行状态为23
  调用完成。
  SQL> call readmaxpro();
  maxpro 的当前进行状态为999999
  调用完成。
  SQL> call readmaxpro();
  管道中现在没有信息返回
  调用完成。
  SQL>

4.2. 执行分析

beginmaxpro(),将主处理存储过程放入队列的过程,执行后存储程序马上返回,maxpro存储过程放在任务队列中,并设定为在当前系统时间执行(马上执行)。

maxpro为主处理存储过程,开始执行模拟大业务处理,处理过程中将处理进度信息写入管道。

readmaxpro();为检查状态存储过程,首先读取信息,如果信息不存在,说明管道内没有信息可读而退出;如果存在信息则读出信息。

本例子可以进行改进,输出不通过DBMS_OUTPUT.PUT_LINE而是用返回值,那么就可以在前端用ADO调用,发布任务,任务过程中从客户端读取进度。代码如下:  CREATE OR REPLACE PROCEDURE readmaxpro(p out intergr) AS
  n integer;
  status integer;
  begin
  status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);
  IF status <> 0 THEN
  P:=-1;
  return;
  END IF;
  DBMS_PIPE.UNPACK_MESSAGE(p);
  end;

上一页  1 2 3 

Tags:Oracle 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接