当前位置:首页 » 服务存储 » oracle执行存储过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oracle执行存储过程

发布时间: 2022-02-26 00:47:22

A. oracle查看执行过哪些存储过程

sql">selectt.sql_id,
t.sql_text,
s.plan_hash_value,
s.optimizer_cost,
s.executions_total,
s.elapsed_time_total,
s.disk_reads_total,
s.buffer_gets_total
fromDBA_HIST_SQLSTATs,DBA_HIST_SQLTEXTt
wheres.sql_id=t.sql_id
andt.sql_textlike'%存储过程名称%';

没有想到其他好办法,确实不太好查了,把存储过程当作SQL来查找吧。

B. oracle自动定期执行存储过程

用job
oracle定时器调用存储过程
1.创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表
Sql代码
create table job_table(run_time date);

create table job_table(run_time date);
2.创建存储过程
Sql代码
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.创建job,并且指定为一分钟执行一次
Sql代码
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;

declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job
Sql代码
select job,broken,what,interval,t.* from user_jobs t;

select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

参数介绍
job job的唯一标识,自动生成的
broken 是否处于运行状态,N;运行;Y:停止
what 存储过程名称
interval 定义的执行时间

补充:
描述 INTERVAL参数值
每天午夜12点 ''TRUNC(SYSDATE + 1)''
每天早上8点30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12点 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每个月第一天的午夜12点 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6点10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

C. ORACLE中怎么执行存储过程

执行带参数的存储过程

begin
存储过程名(参数1,参数2,参数3……);
end;
/

执行不带参数的存储过程

begin
存储过程名;
end;
/

D. oracle 怎么调用存储过程

ORACLE存储过程 以oracle自带例子数据库的表举例
1、

create or replace procere p
is
cursor c is
select * from emp2 for update;
begin
for v_emp in c loop
if(v_emp.sal <2000) then
update emp2 set sal =sal+1 where current of c ;
elsif(v_emp.sal>=2000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;

创建了存储过程不代表运行了存储过程;
运行此存储过程 :
方式一 exec p;
方式二
begin
p;
end;
2、带参数的存储过程
in 相当于程序里的参数,供传入用,在存储过程不能改变其值;
out 相当于程序里的返回值,在存储过程中可以为其赋值传出;
in out 既可以当参数又可以当返回值用;
不带上述说明符默认为in类型;

下例中v_a v_b 为in类型
v_c 为out类型
v_d 为in out 类型

create or replace procere p(v_a in number,v_b number,v_c out number,v_d in out number)
is
begin
if(v_a > v_b) then
v_c := v_a;
else
v_c := v_b;
end if;
v_d := v_d+1;
end;

---> 调试时:
可以在命令窗口调试,出错时 用show errors 显示出错信息;
可以在plDv中调试;

---> 运行时:
可以在命令窗口运行:
declare
v_a number:=3;
v_b number:=4;
v_c number;
v_d number:=5;
begin
p(v_a,v_b,v_c,v_d);
dbms_output.put_line(v_c);
dbms_output.put_line(v_d);
end;
可以在plDv中调试;

E. 请问oracle怎么执行存储过程

我试验过了,就是exec 存储过程名或者execute 存储过程名(参数),请你在仔细确认一下,你的存储过程名写没写对呀,或者你没有进入sqlplus中?

----
以上,希望对你能有帮助。

F. oracle 执行存储过程的问题

参数位置和格式写错了,应该为:
create or replace procere Test
(E_empno in varchar2,
。。。。。。
E_deptno in number)
as
begin
insert into emp
values(E_empno,E_name,E_job,E_mgr,E_hiredate,E_sal,E_comm,E_deptno)
end

G. oracle 执行存储过程

你的procere写错了
create or replace procere abc(v1 in number,v2 in number,res out number)
as
begin
res := v1*v2;
end;
/
在sqlplus里调用
set serveroutput on
var res number;
begin
abc(3, 5, :res);
end;
/
输出:
print res;

问题补充:如何在oracle 10g 使用PL/SQL developer获取系统当前年月日和时间??谢谢!

SELECT SYSDATE FROM DUAL;

H. Oracle 如何能得到执行过的存储过程

需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。

举例如下:

创建存储过程:


createorreplaceprocerep_testasv_begintimevarchar2(20);v_endtimevarchar2(20);v_strvarchar2(10);beginv_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');select'badkano'intov_strfromal;v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');dbms_output.put_line('开始时间为:'||v_begintime);dbms_output.put_line('结束时间为:'||v_endtime);end;end;

执行存储过程:


beginp_test;end;

执行结果:

说明:由于样例存储过程过于简单,但在进行过多数据处理的时候,看到的结果会比较明显。