PL/SQL中怎么让程序每隔几秒刺进一条数据51CTO博客 - 超凡娱乐

PL/SQL中怎么让程序每隔几秒刺进一条数据51CTO博客

2019年03月01日12时50分37秒 | 作者: 觅雪 | 标签: 数据,履行,程序 | 浏览: 1630

在编写ORACLE PL/SQL中,假如需求程序履行中暂停几秒钟再持续履行,能够经过oracle内置的dbms_lock.sleep来完成,不过dbms_lock包需求用户自己装置。

[root@oraclevm ~]# su - oracle

[oracle@oraclevm ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.4.0 Production on Mon May 25 16:36:12 2015


Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> startup    


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                        2014/12/10 10:09:03   第一条的刺进时刻是09:03  

         2 Shirley                     2014/12/10 10:09:13   第二条的刺进时刻是09:13

刚比如第一条晚了10秒钟    

  

SQL> drop table test1;  

  

Table dropped.  


下面给个比如:

每隔一秒刺进一条数据

vi /tmp/11.sh

#/bin/sh

su - oracle <<EOF

sqlplus / as sysdba <<EOF

drop table test;

drop sequence test_seq;

create table test (id int,hostname varchar2(50),datetime date);

create sequence test_seq

minvalue 1

maxvalue 100000

start with 1

increment by 1

cache 20;

declare

maxrecords constant int:=100000;

i int :=1;

begin

for i in 1..maxrecords loop

insert into test

(id,hostname,datetime)

values

(test_seq.nextval,oraclevm,sysdate);

commit;

dbms_lock.sleep(1);

end loop;

end;

/

exit;

EOF


[root@oraclevm ~]#chmod 755 /tmp/11.sh

[root@oraclevm ~]#cd /tmp

[root@oraclevm ~]#./11.sh

即可履行。


先设置一下时刻格局

export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"


最终进行数据查询

spool /tmp/test_oracle

set linesize 80

col hostname format a8;

set colsep ;

set pagesize 0;


SQL> select id,hostname,to_char(datetime,YYYY-MM-DD HH24:MI:SS) from test;

         1 oraclevm 2014-12-27 10:19:09

         2 oraclevm 2014-12-27 10:19:10

         3 oraclevm 2014-12-27 10:19:11

         4 oraclevm 2014-12-27 10:19:12

         5 oraclevm 2014-12-27 10:19:13

         6 oraclevm 2014-12-27 10:19:14

         7 oraclevm 2014-12-27 10:19:15

         8 oraclevm 2014-12-27 10:19:16

         9 oraclevm 2014-12-27 10:19:17

        10 oraclevm 2014-12-27 10:19:18

        


spool用法:

spool是Oracle SQL*PLUS下的指令,能够用它来导出表中的很多数据,生成格局能够由自己手动操控。

1. 编写spool.sql脚本,存放在/tmp目录下

set trimspool on 
set linesize 120 
set pagesize 2000 
set newpage 1 
set heading off 
set term off 
set echo off
set feedback off
spool /tmp/data.txt 
select deptno || , || dname || , || loc from dept;
spool off


2. 在sql*plus上用scott用户登录,履行上面的sql脚本

!/tmp/spool.sql(linux下)

@d:\spool.sql(windows下)


3.调查相应目录,生成了data.txt文件,txt中的内容如下:

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

总结:

运用spool能够方便地导出所需求的表,进而能够运用导出的数据进行不同数据库间的数据搬迁。

下面介绍运用spool的一些常用设置:

set colsep ;    //域输出分隔符 
set echo off;    //显现start发动的脚本中的每个sql指令,缺省为on 
set feedback off;  //回显本次sql指令处理的记载条数,缺省为on 
set heading off;   //输出域标题,缺省为on 
set pagesize 0;   //输出每页行数,缺省为24,为了防止分页,可设定为0。 
set termout off;   //显现脚本中的指令的履行成果,缺省为on(能够缩写为term)
set trimout on;   //去除规范输出每行的拖尾空格,缺省为off 
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off 


留意:

假如直接在sql*plus中履行上面的spool.sql指令,而不经过履行脚原本进行,那么在生成的txt文件中会存在履行的sql句子。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章