国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

sql*plus使用的一些技巧

2024-07-21 02:05:27
字體:
來源:轉載
供稿:網友


sql*plus使用的一些技巧sql*plus中蘊藏著好多技巧,如果掌握這些技巧,對于在oracle數據庫下進行快速開發與有效維護數據庫都是有益的。        下面就接受一二,        1.使用sql*plus動態生成批量腳本將spool與select命令結合起來使用,可以生成一個腳本,腳本中包含有可以批量執行某一任務的語句。例1:生成一個腳本,刪除scott用戶下的所有的表:a. 創建gen_drop_table.sql文件,包含如下語句:spool  c:/drop_table.sql      select 'drop table '|| table_name ||';' from user_tables;      spool off b. 以scott用戶登錄數據庫sqlplus > @ …../gen_dorp_table.sqlc. 在c盤根目錄下會生成文件drop_table.sql文件,包含刪除所有表的語句,如下所示:sql>      select 'drop table '|| table_name ||';' from user_tables;                                                                                               'droptable'||table_name||';'                           -------------------------------------------------------------------------------- drop table dept;                                         drop table emp;                                         drop table parent;                                      drop table stat_vender_temp;                      drop table table_forum;                                                                                                               5 rows selected.                               sql>      spool off  d. 對生成的drop_table.sql文件進行編輯去掉不必要的部分,只留下drop table …..語句e. 在scott用戶下運行dorp_table.sql文件,刪除scott用戶下所有的表。sqlplus > @ c:/dorp_table.sql在上面的操作中,在生成的腳本文件中會有多余的字符,如運行的sql語句,標題,或返回的行數,需要我們編輯該腳本后再運行,給實際的操作帶來諸多不便。懶惰是人的本性,這促使我們用更簡單的辦法來實現上面的任務。a. 創建gen_drop_table.sql文件,包含如下語句:        set echo offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading  off set timing offset verify offset numwidth 38spool  c:/drop_table.sql      select 'drop table '|| table_name ||';' from user_tables;      spool off b. 以scott用戶登錄數據庫sqlplus > @ …../gen_dorp_table.sqlc. 在c盤根目錄下會生成文件drop_table.sql文件,包含刪除所有表的語句,如下所示:drop table dept;                                         drop table emp;                                         drop table parent;                                      drop table stat_vender_temp;                      drop table table_forum;                              d. 在scott用戶下運行dorp_table.sql文件,刪除scott用戶下所有的表。sqlplus > @ c:/dorp_table.sql2.將一個表中的數據導出生成一個文本文件,列與列之間以”,”隔開set echo offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading  off set timing offset verify offset numwidth 38spool  c:/drop_table.sql      select deptno || ',' || dname from dept;     spool off 將上面的內容保存為一個文本文件后,以scott登錄,執行該文件后顯示結果:10,accounting  20,research  30,sales  40,operations  通過上面的兩個例子,我們可以將:set echo offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading  off set timing offset verify offset numwidth 38spool  c:/具體的文件名      你要運行的sql語句     spool off作為一個模版,只要將必要的語句假如這個模版就可以了。在oracle的較新版本中,還可以用set colsep命令來實現上面的功能:sql> set colsep ,sql> select * from dept;        10,accounting    ,new york        20,research      ,dallas        30,sales         ,chicago        40,operations    ,boston        35,aa            ,bb3.動態生成spool命令所需的文件名在我們上面的例子中,spool命令所需要的文件名都是固定的。有時我們需要每天spool一次,并且每次spool的文件名都不相同,如文件名包含當天的日期,該如何實現呢?column dat1 new_value filename;select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual;  spool c:/&&filename..txt  select * from dept;spool off;4.如何從腳本文件中得到windows環境變量的值:在windos中:spool c:/temp/%oracle_sid%.txt   select * from dept;   ...   spool off在上面的例子中,通過%oracle_sid%的方式引用環境變量oracle_sid的值,如果oracle_sid的值為orcl,則生成的spool文件名為:orcl.txt在unix中:spool c:/temp/$oracle_sid.txt   select * from dept;   ...   spool off在上面的例子中,通過$oracle_sid的方式引用環境變量oracle_sid的值,如果oracle_sid的值為orcl,則生成的spool文件名為:orcl.txt5.如何指定缺省的編輯腳本的目錄        在sql*plus中,可以用save命令,將上一條執行的sql語句保存到一個文件中,但是如何設置該文件的缺省目錄呢?通過sql> set editfile c:/temp/file.sql 命令,可以設置其缺省目錄為c:/tmpe,缺省文件名為file.sql。6.如何除去表中相同的行找到相同的行:select * from dept a   where rowid <> (select max(rowid)                   from dept b                   where a.deptno = b.deptno                   and a.dname = b.dname  -- make sure all columns are compared                   and a.loc = b.loc);注釋:如果只找deptno列相同的行,上面的查詢可以改為:select * from dept a   where rowid <> (select max(rowid)                   from dept b                   where a.deptno = b.deptno)刪除相同的行:delete from dept awhere rowid <> (select max(rowid                                from dept b                                where a.deptno = b.deptno                                and a.dname = b.dname -- make sure all columns are compared                                and a.loc = b.loc);注意:上面并不刪除列值為null的行。7.如何向數據庫中插入兩個單引號(’’)insert inot dept values(35,’aa’’’’bb’,’a’’b’);在插入時,用兩個’表示一個’。8.如何設置sql*plus的搜尋路徑,這樣在用@命令時,就不用輸入文件的全路徑。設置sqlpath環境變量。如:sqlpath = c:/orant/dbs;c:/apps cripts;c:/myscripts9.@與@@的區別是什么?@等于start命令,用來運行一個sql腳本文件。@命令調用當前目錄下的,或指定全路徑,或可以通過sqlpath環境變量搜尋到的腳本文件。@@用在腳本文件中,用來指定用@@執行的文件與@@所在的文件在同一目錄,而不用指定全路徑,也不從sqlpath環境變量指定的路徑中尋找文件,該命令一般用在嵌套腳本文件中。10.&與&&的區別&用來創建一個臨時變量,每當遇到這個臨時變量時,都會提示你輸入一個值。&&用來創建一個持久變量,就像用用define命令或帶new_vlaue字句的column命令創建的持久變量一樣。當用&&命令引用這個變量時,不會每次遇到該變量就提示用戶鍵入值,而只是在第一次遇到時提示一次。如,將下面三行語句存為一個腳本文件,運行該腳本文件,會提示三次,讓輸入deptnoval的值:select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;將下面三行語句存為一個腳本文件,運行該腳本文件,則只會提示一次,讓輸入deptnoval的值:select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;11.引入copy的目的copy命令在兩個數據庫之間拷貝數據時特別有用,特別是該命令可以在兩個數據庫之間傳遞long型字段的數據。缺點:在兩個數據庫之間傳遞數據時,有可能丟失精度(lose precision)。12.問什么在修改大量的行時,我的腳本會變得很慢?當通過pl/sql塊修改一個表中的許多行時,你會創建在表上創建一個cursor,但是只有在你關閉cursor時,才會釋放rollback segment,這樣,當cursor仍然打開時,修改過程會變慢,這是因為數據庫不得不搜尋大量的rollback segment以便于維護讀一致性。為了避免這樣情況,試著在表上加一個標志字段來描述該行是否已經被修改,然后關閉該cursor,然后再打開該cursor。每次可以修改5000行.

轉此:http://www.cnoug.org/viewthread.php?tid=31451
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜宾市| 高邮市| 大丰市| 青铜峡市| 东台市| 淮安市| 长岭县| 楚雄市| 玛多县| 宣化县| 汝阳县| 台湾省| 集安市| 白朗县| 崇左市| 泰安市| 运城市| 敦煌市| 蒙山县| 库伦旗| 南部县| 巩义市| 甘孜县| 昌宁县| 景宁| 遵化市| 涟水县| 滦南县| 嘉黎县| 阳朔县| 卢氏县| 独山县| 佛冈县| 南京市| 久治县| 镇平县| 横山县| 屯门区| 武定县| 海盐县| 临沭县|