您的位置:首页 > 其它

存储过程调存储过程实例

2015-06-01 22:01 375 查看
-- 创建table

create table tab_time(

current_time timestamp

);

create table tab_time2(

current_time timestamp

);

-- 创建存储过程

create or replace procedure pro_job_print

as

begin

--dbms_output.put_line('系统时间:' || to_char(sysdate, 'dd-mm-yyyy hh24:mi:ss'));

insert into tab_time values(sysdate);

end;

create or replace procedure pro_job_print2

as

begin

--dbms_output.put_line('系统时间:' || to_char(sysdate, 'dd-mm-yyyy hh24:mi:ss'));

insert into tab_time values(sysdate);

end;

-- 调用过程测试

call students.pro_job_print();

call students.pro_job_print2();

select a.*,a.rowid from tab_time a;

select a.*,a.rowid from tab_time2 a;

--方式1

create or replace procedure call_proc_all_test as

begin

pro_job_print();

pro_job_print2();

exception

when others then

dbms_output.put_line('SQL CODE:' || sqlcode || chr(10) || sqlerrm ||

chr(10) || dbms_utility.format_error_backtrace());

end;

call call_proc_all();

--存放存储过程信息的表 将需要调的存储过程名字及其他信息放到一张表里

create table students.proc_list(

ID Number(4) NOT NULL PRIMARY KEY,

proc_order number(4),

proc_name varchar2(200),

proc_desc varchar2(200),

proc_user varchar2(50)

)

--序列

CREATE SEQUENCE proc_list_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXVALUE -- 不设置最大值

NOCYCLE -- 一直累加,不循环

NOCACHE -- 不建缓冲区

select a.*,a.rowid from students.proc_list a;

insert into students.proc_list values (proc_list_sequence.nextval,1,'pro_job_print','打印表','students');

insert into students.proc_list values (proc_list_sequence.nextval,2,'pro_job_print2','打印表2','students');

--日志表的序列

CREATE SEQUENCE log_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXVALUE -- 不设置最大值

NOCYCLE -- 一直累加,不循环

NOCACHE -- 不建缓冲区

--调用存储过程 方式2

create or replace procedure call_proc as

v_name varchar2(200);

v_sql varchar2(4000);

cursor v_task is --声明游标

select proc_name from students.proc_list a order by a.proc_order desc;

begin

open v_task; --打开游标

--循环游标

loop

fetch v_task

into v_name; --取值

exit when v_task%notfound; --当没有记录时退出循环

dbms_output.put_line('proc_name=' || v_name);

v_sql := 'call ' || v_name || '()';

execute immediate v_sql;

end loop;

close v_task;

end;

select proc_name from students.proc_list a order by a.proc_order desc;

--创建日志表

create table students.call_proc_log(

ID Number(9) NOT NULL PRIMARY KEY,

excu_sql varchar2(2000),

exec_result varchar2(200),

exec_time date

)

call students.call_proc();

select a.*,a.rowid from tab_time a;

select * from tab_time2;

select * from students.call_proc_log;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: