日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用ORACLE生成文本文件

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ORACLE生成文本文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、在使用ORACLE的存儲過程生成文件

在ORACLE中生成文件是比較方便的,尤其是生成對外接口的時候,通過定時任務完成,是一個非常直接的方法,而且比編譯式語言具有更加靈活的方式。

使用PL/SQL生成文件時需要使用到兩個東西:1.目錄對象,2.文件工具包

1. 目錄對象

目錄對象是通過在數據庫中建立一個對象,指向數據庫所有機器的目錄,注意不是本地目錄。如果數據庫在磁陣上,最好將文件放在磁陣上,這樣做雙機熱備的時候不至于出現問題。

添加目錄可以通過PL/SQL Developer或者其它可視化工具建立,也可以通過腳本來生成,腳本有如下形式:

-- Create directory create or replace directory BAS_BLACK_DATAas '/data/appdata/metadata/dispatch/bas';

2. 文件工具包 UTL_FILE

通過UTL_FILE包可以完成文件讀寫,以下是我摘過來的一個UTF_FILE.fopen函數的文檔。

這里注意一點,我這是10g版本下的,如果在9i下,不支持"wb", "rb“ ”ab"模式。

這意味著,不能使用二制式模式打開文件或者寫文件,一般在寫文件時,換行符就會與平臺相關,如果在LINUX下需要生成回車換行符,就得手工操作:

UTF_FILE.put_line(line||chr(13)); -- 通過加下chr(13) = 0x0D方式加入一個回車符,如果在windows平臺,會自動生成回車換行符。如果在WINDOWS上只想生成換行符,估計只能使用UTF_FILE.put方式手動寫入換行符chr(10)。

詳細參考可以通過在PL/SQL Developer上按Ctrl單擊包,去查看包源碼。

/*** FOPEN - open file**** As of 8.0.6, you can have a maximum of 50 files open simultaneously.**** As of 9.0.2, UTL_FILE allows file system access for directories** created as database objects. See the CREATE DIRECTORY command.** Directory object names are case sensitive and must match exactly** the NAME string in ALL_DIRECTORIES. The LOCATION parameter may be** either a directory string from the UTL_FILE_DIR init.ora parameter** or a directory object name.**** IN** location - directory location of file** filename - file name (including extention)** open_mode - open mode ('r', 'w', 'a' 'rb', 'wb', 'ab')** max_linesize - maximum number of characters per line, including the** newline character, for this file.** Valid values are 1 through 32767 and NULL. A NULL** value for max_linesize indicates that UTL_FILE should** calculate an operating system specific value at runtime.** RETURN** file_type handle to open file** EXCEPTIONS** invalid_path - file location or name was invalid** invalid_mode - the open_mode string was invalid** invalid_operation - file could not be opened as requested** invalid_maxlinesize - specified max_linesize is too large or too small** access_denied - access to the directory object is denied*/FUNCTION fopen(location IN VARCHAR2,filename IN VARCHAR2,open_mode IN VARCHAR2,max_linesize IN BINARY_INTEGER DEFAULT NULL)RETURN file_type;PRAGMA RESTRICT_REFERENCES(fopen, WNDS, RNDS, TRUST);

2、生成文件時注意事項

生成文件時,如果是生成定長字節的文件時,需要注意與字符集相關的函數,如果使用錯誤,將會直接給接口文件帶來問題,這可是我的教訓啊!

舉個例子:生成一行文本,要求限制在100個字節內。

如果我這么寫


utf_file.put_line(rpad(content, 100));

上面這樣子是不是就可以了呢?有沒有問題?

大多數情況下沒問題,但問題肯定有,如果查看rpad文件就會說明一點:

RPAD returns expr1, right-padded to lengthn characters with expr2, replicated as many times as necessary. This function is useful for formatting the output of a query.


The argument n is the total length of the return value as it is displayed on your terminal screen. In most character sets, this is also the number of characters in the return value. However, in some multibyte character sets, the display length of a character string can differ from the number of characters in the string.

這里的意思是說,該函數可以生成你指定的字符,而且這里的寬度一般是指在屏幕上顯示的寬度,在多字符集下就會有問題。所有我們如果想處理這個問題,就需要尋求一個取得字節數的函數,并使用如下方式生成:

utf_file.put_line(content||rpad(' ', 100-lengthb(content)));

3、與文本相關函數比較

上面講了,使用ORACLE生成文件時的注意事項,這里,再將相關的函數區別也列一下,只是需要特殊注意ORACLE中的NULL的處理問題,一般函數對于NULL返回NULL,所以如果生成文件的項為NULL就需要做特殊化處理,比如上面的輸出定長100的行時,如果content為空,那該行也為空。所以正確的方式是判斷字段的NULL否。

utf_file.put_line(decode(content, null, ' ', content)||rpad(' ', 100-lengthb(decode(content, null, ' ', content))));

1、length系列

The LENGTH functions return the length of char.LENGTH calculates length using characters as defined by the input character set.LENGTHB uses bytes instead of characters. LENGTHC uses Unicode complete characters.LENGTH2 uses UCS2 code points. LENGTH4 uses UCS4 code points.

如果想取得字節數,可以使用lengthb,如果使用UNICODE使用lengthc,如果使用UCS2使用length2,length4使用UCS4。

這里這么多字符集,其它只需要使用這些是相關標準,以及對應的字符寬度就可以了,而且這里的用語感覺也有點含糊。

相對于中文來講,在GBK字符集情況下,length返回1,lengthb返回2,

在UTF8字符集情況下,length返回1, lengthb返回3,這是因為UTF8編碼方式是這樣子的,其它UTF8編碼是UNICODE的一個編碼方案而已。


2、vsize函數

VSIZE returns the number of bytes in the internal representation ofexpr.?

以國際化呈現的方式返回字符串的字節數,這同樣與字符集相關。

如下地址:http://space.itpub.net/16179598/viewspace-663045 對漢字在ORACLE中長度進行一些比較和實驗,可以參考一下。


3、rpad函數

在前面已經說明了注意事項。


版權聲明:本文為博主原創文章,未經博主允許不得轉載。

轉載于:https://www.cnblogs.com/yin138/archive/2011/08/18/4902259.html

總結

以上是生活随笔為你收集整理的使用ORACLE生成文本文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜影视免费 | 日本一区电影 | 在线播放91 | 国产黄色特级片 | www亚洲| 男生裸体视频 | 不卡av网 | 在线永久看片免费的视频 | 亚洲熟女乱色综合亚洲av | 国产一精品一aⅴ一免费 | 国产小视频免费观看 | 日韩人妻精品一区二区 | 欧美日韩精品一区二区在线播放 | 国产77777| 欧美一区二区在线看 | 欧美日韩在线成人 | 精品久久无码视频 | 色久综合 | 成人性生交大片免费 | 国产欧美一区二区三区鸳鸯浴 | 日韩欧美一区二区三区四区 | 色哟哟黄色 | av国产网站 | 免费的av在线| 91喷水视频 | 日本人添下边视频免费 | 欧美日韩一二三 | 国产三级全黄 | 国产精久久 | 亚洲男同视频 | 国产精品日韩精品 | 亚洲影院一区 | 欧美色图网站 | 超碰98| 理论片中文字幕 | 中国黄色a级片 | 成人福利视频导航 | 99精品视频免费版的特色功能 | 91丝袜国产在线播放 | 熟女俱乐部一区二区 | 欧洲亚洲精品 | 亚洲麻豆av | 国产精彩视频在线观看 | 欧美三级网| 中文字幕人妻色偷偷久久 | 亚洲欧美日韩另类 | 一区二区蜜桃 | 国产又黄又粗又硬 | 自拍偷拍国产视频 | 久久久一区二区 | 久久精品23 | 欧美国产免费 | 三浦理惠子av在线播放 | 日韩一级欧美一级 | 国产精品一级二级三级 | xxxx69视频| 国产一区二区三区四区三区四 | 亚洲精品在线不卡 | 夜夜爽夜夜 | 一区二区自拍 | 就是色 | 中国黄色录像一级片 | 黄色网址在线看 | 日本一区二区三区欧美 | 91麻豆影院 | 人人澡人人射 | 日韩女人性猛交 | 亚洲理论片 | 日日干夜夜骑 | 黄色在线视频网站 | 午夜xx| 少女情窦初开的第4集在线观看 | 丁香色综合 | 黄色三级网站在线观看 | 精品毛片 | av大全在线观看 | 噼里啪啦免费高清看 | 性人久久久久 | 探花视频在线观看 | 日本精品在线 | 亚洲区视频在线观看 | 人人人干| 熟女精品一区二区三区 | 色午夜av | 成人在线不卡视频 | 国产午夜片 | 操模特| 外国黄色网址 | 国产亚洲精品久 | 黄av资源 | 国产精品xxxxx | 国产欧美一区二区精品性色99 | 香蕉视频污在线观看 | 国产精品无码专区av在线播放 | 免费网站看av | 一级片小视频 | 欧美成人做爰猛烈床戏 | 自拍21区 | 国产自产 |