溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PL/SQL中如何讓程序每隔幾秒插入一條數據

發布時間:2020-03-30 19:50:20 來源:網絡 閱讀:5503 作者:xjsunjie 欄目:關系型數據庫

在編寫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語句。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女