根據表結構,自動生成匯入指令碼
以下指令碼,自動生成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
- Django2.0-db(12)-根據已有的表自動生成模型Django模型
- 實現MySQL表結構自動分割槽指令碼MySql指令碼
- SpringBoot使用JPA根據實體類自動生成相應表-mysqlSpring BootMySql
- mysql表結構自動生成golang structMySqlGolangStruct
- 利用FreeSql.Generator自動根據資料庫表動態生成實體類SQL資料庫
- 根據MediatR的Contract Messages自動生成Minimal WebApi介面WebAPI
- P001-根據編碼規則自動生成ID的函式函式
- 根據URL地址生成二維碼
- Python 根據id生成唯一碼Python
- 根據api檔案生成程式碼API
- vue自定義表單生成器,可根據json引數動態生成表單VueJSON
- awr報告每天自動生成指令碼指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 根據JSON自動構建的vue篩選框元件JSONVue元件
- java使用jaxb解析XML(含根據xml自動生成實體類)JavaXML
- 一個根據資料庫自動生成model類的擴充套件資料庫套件
- Docker實踐,Shell指令碼自動根據映象名和埠,啟動docker容器,執行springcloud專案Docker指令碼SpringGCCloud
- 只匯入表結構及索引的方法索引
- 根據使用者編號生成邀請碼
- OpenAPI Generator,根據Swagger/OpenAPI生成程式碼的工具APISwagger
- EF3.1 根據資料庫生成程式碼資料庫
- openai開源 shap-e 根據文字或影像生成 3D 模型,支援匯入blenderOpenAI3D模型
- 規範你的 commit message 並且根據 commit 自動生成 CHANGELOG.mdMIT
- 用bat指令碼自動生成安裝包InnosetupBAT指令碼
- MyBatis 根據資料表反向生成 java 實體類等MyBatisJava
- webstorm根據.eslintrc檔案自動修復WebORMEsLint
- Laravel-sluggable,讓你的專案 Url 更加友好,根據模型自動生成 slugLaravel模型
- 訊飛有一個可以根據描述文字自動生成PPT的AI介面,有趣AI
- 聯發科AI會根據輸入實時生成影像AI
- 根據年月份分表
- 根據ip列表檢測主機狀態(shell指令碼)指令碼
- iOS自動構建打包釋出指令碼iOS指令碼
- python 小指令碼 (實現 elasticsearch 匯出匯入)Python指令碼Elasticsearch
- Delphi 根據資料庫表生成Record型別,並封裝CRUD資料庫型別封裝
- clickhouse表結構匯出為
- PLSQL只匯出表結構SQL
- 前端利器!讓AI根據手繪原型生成HTML | 教程+程式碼前端AI原型HTML