在编写PL/SQL中,有时需要程序中暂停几秒钟再继续执行,查了一下,oracle内置有这个功能dbms_lock.sleep(10);不过dbms_lock包需要用户自己安装,演示如下:

  1. C:\Documents and Settings\andyleng>sqlplus /nolog
  2. SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 10 10:04:56 2011
  3. Copyright (c) 1982, 2010, Oracle.  All rights reserved.
  4. SQL> conn /as sysdba  --以SYSDBA身份登陆
  5. Connected.
  6. SQL> @?/rdbms/admin/dbmslock.sql --安装系统包
  7. Package created.
  8. Synonym created.
  9. Grant succeeded.
  10. SQL> grant execute on dbms_lock to public; --授权PUBLIC执行权限
  11. Grant succeeded.
  12. SQL> create table test1(id number,name varchar2(40),time date);   --创建test1临时表
  13. Table created.
  14. SQL> select * from test1;  --无数据
  15. no rows selected
  16. SQL> SET TIMING ON  --打开时间显示
  17. SQL> begin  --开始执行测试脚本
  18. 2    insert into test1(id,name,time) values(1,'Andy',sysdate);
  19. 3    DBMS_LOCK.SLEEP(10);  --让程序暂时10秒钟
  20. 4    insert into test1(id,name,time) values(2,'Shirley',sysdate);
  21. 5    commit;
  22. 6  end;
  23. 7  /
  24. PL/SQL procedure successfully completed.
  25. Elapsed: 00:00:10.04  --程序执行时间为10.04秒
  26. SQL> SELECT ID,NAME,TO_CHAR(TIME,'YYYY/MM/DD HH24:MI:SS') AS TIME FROM TEST1; --查询执行结果
  27. ID NAME                                     TIME
  28. ---------- ---------------------------------------- -------------------
  29. 1 Andy                                     2011/11/10 10:09:03   --第一条的插入时间是09:03
  30. 2 Shirley                                  2011/11/10 10:10:13   --第二条的插入时间是09:13,刚好比第一条晚了10秒钟
  31. Elapsed: 00:00:00.00
  32. SQL> drop table test1;
  33. Table dropped.

自定义EXCEPTION 和GOTO的用法:

    1. -- Create the procedure to loop del users.
    2. CREATE OR REPLACE PROCEDURE QA2_ATGCORE_MF.delBigTab
    3. AS
    4. PRAGMA AUTONOMOUS_TRANSACTION;
    5. p_Count   NUMBER := 1000;
    6. n_delete number:=0;
    7. start_time date:=sysdate;
    8. end_time date;
    9. var_usergroup number;
    10. e_nowait EXCEPTION;--自定义exception
    11. PRAGMA EXCEPTION_INIT(e_nowait,-00054);--初使化该exception到“ORA-00054”的错误代码
    12. BEGIN
    13. <<restart>>--程序标签
    14. WHILE 1 = 1
    15. LOOP
    16. begin
    17. var_usergroup:=QA2_ATGCORE_MF.DEL_USERGROUP_SEQ.nextval;
    18. EXECUTE IMMEDIATE
    19. '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'
    20. USING var_usergroup,P_COUNT;
    21. IF (SQL%NOTFOUND)
    22. OR (TO_CHAR (SYSDATE, 'hh24mi') BETWEEN '0600' AND '1200')
    23. THEN
    24. EXIT;
    25. ELSE
    26. n_delete:=n_delete + SQL%ROWCOUNT;
    27. QA2_ATGCORE_MF.DEL_USERGROUP(var_usergroup);
    28. END IF;
    29. COMMIT;
    30. EXCEPTION
    31. WHEN e_nowait THEN
    32. DBMS_LOCK.SLEEP(2););--出现ORA-00054的错误时先等待2秒钟
    33. DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS')||SQLCODE||':'||SQLERRM||' I am go to restart' );
    34. GOTO restart;--出现ORA-00054的错误时跳转到restart处重新执行该程序
    35. WHEN OTHERS THEN
    36. ROLLBACK;
    37. RAISE;
    38. END;
    39. END LOOP;
    40. COMMIT;
    41. end_time:=sysdate;
    42. DBMS_OUTPUT.PUT_LINE('***************************************************************************');
    43. DBMS_OUTPUT.PUT_LINE('Totally delete '||to_char(n_delete)||' users! Used time:'||numtodsinterval (end_time-start_time,'DAY'));
    44. DBMS_OUTPUT.PUT_LINE('***************************************************************************');
    45. END;
    46. /

在PL/SQL中如何让程序暂停几秒钟的更多相关文章

  1. 在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟

    1. how to check procedure exist: SQL> conn oper/oper123Connected.SQL> desc dbms_lock;PROCEDURE ...

  2. PL/SQL中SELECT总结

      一.SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~) 1.SELECT 2.FROM 3.WHERE 4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用 5.H ...

  3. PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)

    PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...

  4. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

  5. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  6. PL/Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...

  7. PL/SQL中如何执行DDL、SCL?

    PL/SQL程序中不能直接执行DDL语句.为什么? 假设我们在pl/sql程序中有这样的一条DDL语句—— drop table emp:在第一次解析pl/sql中的“drop table emp;” ...

  8. pl/sql 中F8执行单行sql

    pl/sql中设置: tools->preferences->sql window->AutoSelect statement

  9. 在PL/SQL中调用Oracle存储过程

    存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...

随机推荐

  1. 纪念,BZOJ AC 100题!

    虽然说有将近50+是usaco,然后还有很多水题T_T 看来我还是刷水题.... 看来我还是那么弱. T_T 但是好歹也要留个纪念..

  2. 转载: crypto:start() 错误。

    错误信息: Eshell V5.10.3  (abort with ^G)1> crypto:start().** exception error: undefined function cry ...

  3. 隐马尔可夫树(HMT模型)

    HMT(Hidden Markov Tree)隐马尔可夫树 [论文] 小波变换与HMT模型的图像插值算法-郭昌-中山大学学报(自然科学版)

  4. .NET基础知识(一、认识.Net)

    参考链接:http://blog.csdn.net/shanyongxu/article/details/50849111 认识.NET平台 可能很多人问什么是.NET框架,它包含了哪些内容?为开发程 ...

  5. Linux 文件夹含义(转)

    1./bin :获得最小的系统可操作性所需要的命令 2./boot :内核和加载内核所需的文件 3./dev :终端.磁盘.调制解调器等的设备项 4./etc :关键的启动文件和配置文件 5./hom ...

  6. poj_1836 动态规划

    题目大意 N个士兵排成一排,不是按照高度顺序排列.现在想要从中去掉几名士兵,从而使得队伍中剩余的士兵能够看到这排最左边或者最右边的那个士兵,某士兵能够看到最左边(或最右边)的士兵指这名士兵和最左边(或 ...

  7. poj_2823 线段树

    题目大意 给定一行数,共N个.有一个长度为K的窗口从左向右滑动,窗口中始终有K个数字,窗口每次滑动一个数字.求各个时刻窗口中的最大值和最小值. 题目分析 直接搜索,复杂度为O(n^2).本题可以看做是 ...

  8. 【黑金原创教程】【TimeQuest】【第三章】TimeQuest 扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. Foj1683矩阵快速幂水题

    Foj 1683 纪念SlingShot 题目链接:http://acm.fzu.edu.cn/problem.php?pid=1683 题目:已知 F(n)=3 * F(n-1)+2 * F(n-2 ...

  10. 关于ln(link)命令

    一. ln分为硬链接和软链接. 二. 硬链接命令为: ln test/a.text hard.text 1. 这样hard.text拥有 test目录下a.text相同的i节点(inode的id号)和 ...