存储过程调存储过程实例
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;
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;
相关文章推荐