在PL/SQL中如何让程序暂停几秒钟
在编写PL/SQL中,有时需要程序中暂停几秒钟再继续执行,查了一下,oracle内置有这个功能dbms_lock.sleep(10);不过dbms_lock包需要用户自己安装,演示如下:
- C:\Documents and Settings\andyleng>sqlplus /nolog
- SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 10 10:04:56 2011
- Copyright (c) 1982, 2010, Oracle. All rights reserved.
- SQL> conn /as sysdba --以SYSDBA身份登陆
- Connected.
- SQL> @?/rdbms/admin/dbmslock.sql --安装系统包
- Package created.
- Synonym created.
- Grant succeeded.
- SQL> grant execute on dbms_lock to public; --授权PUBLIC执行权限
- Grant succeeded.
- SQL> create table test1(id number,name varchar2(40),time date); --创建test1临时表
- Table created.
- SQL> select * from test1; --无数据
- no rows selected
- SQL> SET TIMING ON --打开时间显示
- SQL> begin --开始执行测试脚本
- 2 insert into test1(id,name,time) values(1,'Andy',sysdate);
- 3 DBMS_LOCK.SLEEP(10); --让程序暂时10秒钟
- 4 insert into test1(id,name,time) values(2,'Shirley',sysdate);
- 5 commit;
- 6 end;
- 7 /
- PL/SQL procedure successfully completed.
- Elapsed: 00:00:10.04 --程序执行时间为10.04秒
- SQL> SELECT ID,NAME,TO_CHAR(TIME,'YYYY/MM/DD HH24:MI:SS') AS TIME FROM TEST1; --查询执行结果
- ID NAME TIME
- ---------- ---------------------------------------- -------------------
- 1 Andy 2011/11/10 10:09:03 --第一条的插入时间是09:03
- 2 Shirley 2011/11/10 10:10:13 --第二条的插入时间是09:13,刚好比第一条晚了10秒钟
- Elapsed: 00:00:00.00
- SQL> drop table test1;
- Table dropped.
自定义EXCEPTION 和GOTO的用法:
- -- Create the procedure to loop del users.
- CREATE OR REPLACE PROCEDURE QA2_ATGCORE_MF.delBigTab
- AS
- PRAGMA AUTONOMOUS_TRANSACTION;
- p_Count NUMBER := 1000;
- n_delete number:=0;
- start_time date:=sysdate;
- end_time date;
- var_usergroup number;
- e_nowait EXCEPTION;--自定义exception
- PRAGMA EXCEPTION_INIT(e_nowait,-00054);--初使化该exception到“ORA-00054”的错误代码
- BEGIN
- <<restart>>--程序标签
- WHILE 1 = 1
- LOOP
- begin
- var_usergroup:=QA2_ATGCORE_MF.DEL_USERGROUP_SEQ.nextval;
- EXECUTE IMMEDIATE
- 'update QA2_ATGCORE_MF.DPS_USER_DEL_TEMP set usergroup_id=:usergroup,del_flag=''1'',del_time=sysdate where del_flag=''0'' and rownum <=:rn'
- USING var_usergroup,P_COUNT;
- IF (SQL%NOTFOUND)
- OR (TO_CHAR (SYSDATE, 'hh24mi') BETWEEN '0600' AND '1200')
- THEN
- EXIT;
- ELSE
- n_delete:=n_delete + SQL%ROWCOUNT;
- QA2_ATGCORE_MF.DEL_USERGROUP(var_usergroup);
- END IF;
- COMMIT;
- EXCEPTION
- WHEN e_nowait THEN
- DBMS_LOCK.SLEEP(2););--出现ORA-00054的错误时先等待2秒钟
- DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS')||SQLCODE||':'||SQLERRM||' I am go to restart' );
- GOTO restart;--出现ORA-00054的错误时跳转到restart处重新执行该程序
- WHEN OTHERS THEN
- ROLLBACK;
- RAISE;
- END;
- END LOOP;
- COMMIT;
- end_time:=sysdate;
- DBMS_OUTPUT.PUT_LINE('***************************************************************************');
- DBMS_OUTPUT.PUT_LINE('Totally delete '||to_char(n_delete)||' users! Used time:'||numtodsinterval (end_time-start_time,'DAY'));
- DBMS_OUTPUT.PUT_LINE('***************************************************************************');
- END;
- /
在PL/SQL中如何让程序暂停几秒钟的更多相关文章
- 在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
1. how to check procedure exist: SQL> conn oper/oper123Connected.SQL> desc dbms_lock;PROCEDURE ...
- PL/SQL中SELECT总结
一.SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~) 1.SELECT 2.FROM 3.WHERE 4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用 5.H ...
- PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)
PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...
- oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT, ROLLBACK, 和SA ...
- PL/SQL中LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- PL/Sql 中创建、调试、调用存储过程
存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...
- PL/SQL中如何执行DDL、SCL?
PL/SQL程序中不能直接执行DDL语句.为什么? 假设我们在pl/sql程序中有这样的一条DDL语句—— drop table emp:在第一次解析pl/sql中的“drop table emp;” ...
- pl/sql 中F8执行单行sql
pl/sql中设置: tools->preferences->sql window->AutoSelect statement
- 在PL/SQL中调用Oracle存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...
随机推荐
- C++ 函数的扩展③--函数重载
//函数扩展--函数重载(C语言不支持函数重载) #include<iostream> using namespace std; //函数重载在本质上是相互独立的不同函数(静态链编),在c ...
- sql one
查询的话 子查询什么的都很正常 添加的话 尽量把东西都添加在一个表单里 这是源头 有个这个方便的源头 查询和删除都会方便很多 组建一个网站,不可避免的要进行调试,有些功能需要添加或者删除,对于后台来讲 ...
- (转)directx中丢失的设备(lost device)
directx中丢失的设备(lost device) 丢失的设备 一个Microsoft? Direct3D?可以处于操作状态或丢失状态.操作状态是设备的正常状态,设备按预期运行并present所 ...
- linux基础教程---内容操作
一.寻找文件里的指定内容 寻找文件里的指定内容,输出内容所在行的所有信息 grep 被搜索内容 文件路径名 >grep var passwd //在 ...
- Excel随机生成数据
CONCATENATE函数是一个文本连接函数,非常简单,和&的效果一样. CONCATENATE是一个文本连接函数 语法:CONCATENATE(text1,text2,text3...... ...
- sqlalchemy 判断字段是否存在
1.low方法: (1)person_obj=session.query(Person).filter(Person.name=='jack') print (person_obj.count()) ...
- Django学习笔记第十篇--实战练习六--发送邮件
一.发送邮件需要引入的包依赖文件(Django1.8 Python2.7) from django.core.mail import send_mail,send_mass_mail 其中send_m ...
- Android开源天气预报应用Weather-Lite
由于最近繁忙的工作告一段落,要清闲一段时间,所以可以好好利用这段时间给自己充充电. 于是乎这个app就诞生了.本着开源的精神我把它放在了github上.这里如果有Android初学者的话不妨学习一下, ...
- ajax跨域问题解决之cors篇
现在浏览器出于安全考虑,在域名.协议.端口不同的情况下,浏览器会认为这是跨域,ajax请求是不允许跨域的. 如果我们有跨域的需求,可以使用cors解决.其原理就是,在请求之前先发送一个OPTIONS请 ...
- C# 构建动态Lambda表达式
做CURD开发的过程中,通常都会需要GetList,然而查询条件是一个可能变化的需求,如何从容对应需求变化呢? 首先,我们来设计一个套路,尝试以最小的工作量完成一次查询条件的需求变更 1.UI收集查询 ...