在編寫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
connected to:
oracle database 11g enterprise edition release 11.2.0.4.0 - 64bit production
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 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語句。
vue如何實現輪詢,每隔幾秒請求一次
業務場景 某個業務號經過繳費之後,會生成乙個保單號,我們需要每隔幾秒請求一次拿到保單號 在此場景中,因為保單號是需要第三方平台確認收到賬款之後才返回的,而且是乙個乙個單號返回的,當我們選擇n條資料進行操作的時候,我們就必須每隔幾秒請求一次,直到我們拿到的保單號和我們請求的資料條數相同時,停止請求 話...
如何讓plsql連線64位oracle資料庫
plsql只是32位的,如何操作64的資料庫,方法如下 3.然後找到oracle安裝目錄中的network admin tnsnames.ora檔案,將network admin tnsnames.ora資料夾結構及檔案都複製到instantclient basic win32解壓縮的資料夾之中 4...
如何讓plsql查詢的資料可編輯
plsql允許查詢資料可以編輯的條件是必須查詢出rowid 在某個表上點選query data 出現的sql語句是 select from licence t 在某個表上點選 edit data 出現的sql語句是 select t.t.rowid from licence t 說明要編輯必須帶有r...