在編寫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.
在編寫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 < sqlplus / as sysdba < 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 2. 在sql*plus上用scott用戶登錄,執行上面的sql腳本 !/tmp/spool.sql(linux下) @d:\spool.sql(windows下) 3.觀察相應目錄,生成了data.txt文件,txt中的內容如下: 10,ACCOUNTING,NEW YORK 總結: 利用spool可以方便地導出所需要的表,進而可以利用導出的數據進行不同數據庫間的數據遷移。 下面介紹使用spool的一些常用設置: set colsep ' '; //域輸出分隔符 注意: 如果直接在sql*plus中執行上面的spool.sql命令,而不通過執行腳本來進行,那么在生成的txt文件中會存在執行的sql語句。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
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
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
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