iT邦幫忙

3

十五、窮則變、變則通(Oracle SQL 2013/09/30)

話說,資料轉完後,偶而會有需要把資料匯出,
當然你可以用TOAD, SQL Developer,其他開發工具來做匯出動作,
那遇到沒有上面工具的,手邊只有SQL PLUS的怎麼辦?
話說我真是沒錢買開發工具,沒膽用盜版軟體!
今天就來說說SQL PLUS這個工具有多.....簡單的用法!

就以這個Table為例
SQL> select * from dept;

DEPTNO DNAME LOC


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

這裡用4筆資料,是不多但也不少,用來示範剛剛好。

目的在產生 insert into dept (deptno, ….) values (10, ……);共4筆

首先,感謝Oracle,他把表格欄位都記錄下來了,其中一個表格就是All_tab_columns。

  1  select substrb(table_name, 1, 30) tab_name,
  2  substrb(column_name, 1, 30) col_name,
  3  data_type
  4   from all_tab_columns
  5* where table_name = 'DEPT'
SQL> /

TAB_NAME                       COL_NAME                       DATA_TYPE
------------------------------ ------------------------------ ------------------------------
DEPT                           DEPTNO                         NUMBER
DEPT                           DNAME                          CHAR
DEPT                           LOC                            CHAR

上面col_name就是我們要產生的關鍵資料來源,很重要!
開始吧!以上欄位的轉折功能可以用前面網友分享的pivot(樞紐) 做到,不過時間不夠用,等下次整理看看。

這次就做到這裡。

  1  select 'insert into DEPT( '|| 'DEPTNO, DNAME, LOC ) values ('||
  2         deptno ||','||
  3         chr(39)||trim(dname)||chr(39)||','||
  4         chr(39)||trim(loc)  ||chr(39)||');'  "insert into DEPT"
  5*   from DEPT dd
SQL> /

insert into DEPT
----------------------------------------------------------------------------------------------------
insert into DEPT( DEPTNO, DNAME, LOC ) values (10,'ACCOUNTING','NEW YORK');
insert into DEPT( DEPTNO, DNAME, LOC ) values (20,'RESEARCH','DALLAS');
insert into DEPT( DEPTNO, DNAME, LOC ) values (30,'SALES','CHICAGO');
insert into DEPT( DEPTNO, DNAME, LOC ) values (40,'OPERATIONS','BOSTON');

接著透過spool 檔案、set head off 等指令就可以產生insert 的批次擋了。
也可以在union 出 'commit;’在最後一列。

[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1

[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1


尚未有邦友留言

立即登入留言