根據表結構,自動生成匯入指令碼
以下指令碼,自動生成sqlldr匯入需要的ctl檔案
使用示例:
exec DUMP_CTL('MY_DIR','a','AUTHEN','APPEND','|',P_ENCLOSURE => NULL,P_TERMINATOR => '|') ;
[@more@]CREATE OR REPLACE PROCEDURE DUMP_CTL( P_DIR IN VARCHAR2,
P_FILENAME IN VARCHAR2,
P_TNAME IN VARCHAR2,
P_MODE IN VARCHAR2,
P_SEPARATOR IN VARCHAR2,
P_ENCLOSURE IN VARCHAR2,
P_TERMINATOR IN VARCHAR2)
IS
L_OUTPUT UTL_FILE.FILE_TYPE;
L_SEP VARCHAR2(5);
L_STR VARCHAR2(5);
L_PATH VARCHAR2(5);
IS_IN_DATATYPE INTEGER := 0;
G_NL VARCHAR2(2) DEFAULT CHR(10);
cursor c(v_tabname varchar2) is select * from user_tab_columns where table_name = v_tabname order by column_id asc;
BEGIN
dbms_output.put_line(P_DIR);
L_OUTPUT := UTL_FILE.FOPEN( P_DIR, P_FILENAME || '.CTL', 'w' );
UTL_FILE.PUT_LINE( L_OUTPUT, 'LOAD DATA' );
UTL_FILE.PUT_LINE( L_OUTPUT, 'INFILE * ' || ' "STR X''' ||
UTL_RAW.CAST_TO_RAW(chr(10) ) || '''"' );
UTL_FILE.PUT_LINE( L_OUTPUT,P_MODE || ' INTO TABLE ' || P_TNAME );
UTL_FILE.PUT_LINE( L_OUTPUT, 'FIELDS TERMINATED BY ''' ||
P_SEPARATOR ||
''' ENCLOSED BY X''' ||
P_ENCLOSURE || ''' ' );
UTL_FILE.PUT_LINE( L_OUTPUT, '(' );
FOR I IN c(P_TNAME) LOOP
IF ( i.data_type in ('DATE') ) THEN
UTL_FILE.PUT( L_OUTPUT, L_SEP || i.COLumn_NAME ||
' DATE ''DDMMYYYYHH24MISS'' ');
IS_IN_DATATYPE := 1;
END IF;
IF ( i.data_type in ('VARCHAR2','CHAR') ) THEN
UTL_FILE.PUT( L_OUTPUT, rpad(L_SEP || i.COLumn_NAME,20,' ') ||
' CHAR(' ||
TO_CHAR(i.DATA_LENGTH*2) ||' )' );
-- UTL_FILE.PUT( L_OUTPUT,' terminated by '''||P_TERMINATOR||'''' );
END IF;
IF ( i.data_type in ('FLOAT','NUMBER') ) THEN
UTL_FILE.PUT( L_OUTPUT, rpad(L_SEP || i.COLumn_NAME,20,' ')) ;
-- UTL_FILE.PUT( L_OUTPUT,' terminated by '''||P_TERMINATOR||'''' );
IS_IN_DATATYPE := 1;
END IF;
IF IS_IN_DATATYPE = 0 THEN
UTL_FILE.PUT( L_OUTPUT, rpad(L_SEP || i.COLumn_NAME,20,' ') );
END IF;
L_SEP := ','||G_NL ;
--L_SEP := ' terminated by '||P_TERMINATOR||','||G_NL ;
END LOOP;
UTL_FILE.PUT_LINE( L_OUTPUT,G_NL || ')' );
UTL_FILE.FCLOSE( L_OUTPUT );
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/197458/viewspace-1022463/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mybatis根據表逆向自動化生成程式碼MyBatis
- PHP根據資料表自動生成CURD操作PHP
- EF:根據實體類生成表結構SQLSQL
- 根據DELTA自動生成SQL語句SQL
- Django2.0-db(12)-根據已有的表自動生成模型Django模型
- 實現MySQL表結構自動分割槽指令碼MySql指令碼
- mysql表結構自動生成golang structMySqlGolangStruct
- SpringBoot使用JPA根據實體類自動生成相應表-mysqlSpring BootMySql
- 根據快照產生statpack報表的Shell指令碼指令碼
- 一個根據程式碼自動生成UML的外掛,助你看原始碼事半功倍原始碼
- 用自訂函式實現功能-------根據指定表名得到表的結構 (轉)函式
- P001-根據編碼規則自動生成ID的函式函式
- 表統計資訊匯出匯入指令碼指令碼
- 自動生成Statspack的指令碼指令碼
- 根據URL地址生成二維碼
- 根據api檔案生成程式碼API
- 根據結構基本相同的A表的值更新B表
- SQL2Struct:一款根據sql語句自動生成golang結構體的chrome外掛SQLStructGolang結構體Chrome
- 根據源庫表空間實際使用建立表空間指令碼指令碼
- dev 根據datatable動態生成gridviewdevView
- 自動生成ASH報告指令碼指令碼
- AWR報告自動生成指令碼指令碼
- 自動生成awr報告指令碼指令碼
- vue自定義表單生成器,可根據json引數動態生成表單VueJSON
- 根據欄位名等查詢SAP的表或結構(程式程式碼)
- Python 根據id生成唯一碼Python
- PHP根據wsdl生成呼叫soapwebservice程式碼PHPWeb
- 根據時間欄位匯入資料的問題總結
- Oracle表結構轉換SqlSERVER表結構 指令碼OracleSQLServer指令碼
- java使用jaxb解析XML(含根據xml自動生成實體類)JavaXML
- awr報告每天自動生成指令碼指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 一個根據資料庫自動生成model類的擴充套件資料庫套件
- 根據MediatR的Contract Messages自動生成Minimal WebApi介面WebAPI
- 根據JSON自動構建的vue篩選框元件JSONVue元件
- 一個根據已有表結構來建立新表的儲存過程儲存過程
- oracle報表自動FTP指令碼OracleFTP指令碼
- impdp 匯入 指令碼指令碼