cari
Rumahpangkalan datatutorial mysqlOracle中utl_file包的使用

包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读

一、使用方法

包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读取,写入,操作目录中的文件了。

二、步骤

1、创建目录对象和授权

SQL> CREATE DIRECTORY CZW AS 'D:\';
Directory created
SQL> GRANT READ,WRITE ON DIRECTORY CZW TO SCOTT;
Grant succeeded
2、定义
h_file  utl_file.file_type
3、使用
h_file = utl_file.fopen('SQL_TMP','tmp_rollback_tables','a');
utl_file.put_line(h_file,"strr");
utl_file.fclose(h_file);
三、UTL_FILE包中函数说明
1、FILE_TYPE
该类型是UTL_FILE包中定义的记录类型,其成员是私有的,不能够被直接引用。该类型的定义如下:
TYPE file_type IS RECORD(
    id  BINARY_INTEGER,datatype BINARY_INTEGER
);
2、FOPEN
该函数用于打开文件。使用这个函数最多可以打开50个文件,语法如下:
UTL_FILE.FOPEN(
    location IN VARCHAR2,
    filename IN VARCHAR2,
    open_mode IN VARCHAR2,
    max_linesize IN BINARY_INTEGER
)
RETURN file_type;
当成功的执行了该函数之后,就会返回文件句柄,访问该文件可以使用该文件句柄。如果执行失败的话,则会触发例外或者显示错误。注意,当指定文件位置的时候,必须要使用DIRECTORY对象,并且其名称必须为大写。示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
BEGIN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
  DBMS_OUTPUT.PUT_LINE('D:\DYWT.TXT已经被打开');
END;
 
3、FOPEN_NCHAR
该函数用于以UNICODE方式打开文件。当使用该函数打开文件之后,读写文件会使用UNICODE取代数据库字符集。语法如下:
UTL_FILE.FOPEN_NCHAR(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  open_mode IN VARCHAR2,
  max_linesize IN BINARY_INTEGER)
RETURN file_type;
 
4、IS_OPEN
该函数用于确定文件是否已经被打开,语法如下:
UTL_FILE.IS_OPEN(file IN FILE_TYPE) RETURN BOOLEAN;
如上所示,file用于指定文件句柄。如果文件已经被打开,则返回TRUE,否则则返回FALSE,该函数的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  DBMS_OUTPUT.PUT_LINE('D:\DYWT.TXT已经被打开');
END;
 
5、FCLOSE
该过程用于关闭已经打开的文件,语法如下:
UTL_FILE.FCLOSE(FILE IN OUT FILE_TYPE);
 
6、FCLOSE_ALL
该过程用于关闭当前打开的所有文件。语法如下:
UTL_FILE.FCLOSE_ALL;
 
7、GET_LINE
该过程用于从已经打开的文件中读取行内容,行内容会被读取到输出缓冲区。语法如下:
UTL_FILE.GET_LINE(
  file IN FILE_TYPE,
  buffer OUT VARCHAR2,
  linesize IN NUMBER,
  len IN PLS_INTEGER DEFAULT NULL
);
如上所示,buffer用于存储读取信息;linesize用于要指定读取的最大字节数;len用于指定实际读取的长度。使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(100);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  UTL_FILE.GET_LINE(HANDLE,BUFFER,100);
  DBMS_OUTPUT.PUT_LINE(BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
 
8、GET_LINE_NCHAR
该过程的用法同上面的是一样的,只不过是用UNICODE方式读取已经打开的文件的行内容,并且将行内容读取到输出缓冲区中。
 
9、GET_RAW
该过程用于从文件中读取RAW字符串,并调节文件指针到读取位置。语法如下:
UTL_FILE.GET_RAW(
  fid IN UTL_FILE.TYPE,
  r  OUT NOCOPY RAW,
  len IN PLS_INTEGER DEFAULT NULL
);
上面所示:fid用于指定文件的句柄,r用于取得读取信息,示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  UTL_FILE.GET_RAW(HANDLE,BUFFER,1000);
  DBMS_OUTPUT.PUT_LINE(BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
 
10、PUT
该过程用于将缓冲区内容写入到文件中。当使用PUT过程的时候,文件必须以写方式打开,在写入缓冲区之后,如果要结束行,那么可以使用NEW_LINE过程。语法如下:
UTL_FILE.PUT(file IN FILE_TYPE,buffer IN VARCHAR2);
使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.IS_OPEN(HANDLE) THEN
  HANDLE := UTL_FILE.FOPEN('CZW','NEW.TXT','W',1000);
END IF;
  BUFFER:='&CONTENT1';
  UTL_FILE.PUT(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  BUFFER:='&CONTENT2';
  UTL_FILE.PUT(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  UTL_FILE.FCLOSE(HANDLE);
END;
 
11、PUT_NCHAR
作用同上,该过程用于将缓冲区的内容以UNICODE方式写入到文件。
 
12、PUT_RAW
该过程用于将RAW缓冲区中的数据写入文件中。语法如下:
UTL_FILE.PUT_RAW(
  fid IN UTL_FILE.FILE_TYPE,
  R  IN RAW,
  autoflush IN BOOLEAN DEFAULT FALSE
)
上述,fid用于指定文件句柄,r用于指定存放RAW数据的缓冲区,autoflush用于指定是否自动刷新缓冲区数据.该过程的示例如下:
 
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.IS_OPEN(HANDLE) THEN
  HANDLE := UTL_FILE.FOPEN('CZW','NEW.TXT','W',1000);
END IF;
  BUFFER:='&CONTENT1';
  UTL_FILE.PUT_RAW(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  UTL_FILE.FCLOSE(HANDLE);
END;
 
13、NEW_LINE
该过程用于为文件增加行终止符,语法如下:
UTL_FILE.NEW_LINE(file IN FILE_TYPE,lines IN NATURAL :=1);
后面的lines用于指定在文件中增加的行终止符的个数。
 
14、PUT_LINE
该过程用于将文本缓冲区内容写入到文件中。当使用该过程为文件追加内容时,会自动在文件的尾部追加行终止符。
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','W',1000);
END IF;
  BUFFER := '&CONTENT';
  UTL_FILE.put_line(HANDLE,BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
注意:会删掉之前的数据,是在新写入的行后面增加一个行结束符。
 
15、PUT_LINE_NCHAR
同上,该过程用于将文本缓冲区内容以UNICODE方式写入文件。当使用该过程写入内容的时候,会自动的在尾部追加行终止符。
2012/12/31 13:50经过测试,会清空原有文件中的内容。
 
16、PUTF
该过程用于以特定的格式将文本内容写入到文件中,其中%s标识字符串,,格式\n表示行终止符。语法如下:
UTL_FILE.PUTF(
  file IN FILE_TYPE,
  format IN VARCHAR2,
  [arg1 IN VARCHAR2 DEFAULT NULL,
  ...
  arg5 IN VARCHAR2 DEFAULT NULL]);
上述format用于指定格式符(最多支持5个%s),arg1...arg5用于指定对应于格式符的字符串。使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','W',1000);
END IF;
  UTL_FILE.PUTF(HANDLE,'%s\n%s\n%s\n','&line1','&line2','&line3');
  UTL_FILE.FCLOSE(HANDLE);
END;
 
17、PUTF_NCHAR
同上,该过程用于以特定的格式将文本内容以UNICODE方式写入到文件中。
 
18、FFLUSH
该过程用于将数据强制性写入到文件中,正常情况下,当给文件写入数据的时候,数据会被暂时的放到缓存中。过程FFLUSH用于强制将数据写入到文件中。语法如下:
UTL_FILE.FFLUSH(file IN FILE_TYPE):
 
19、FSEEK
该过程用于移动文件指针到特定的位置。当使用该过程移动文件指针的时候,既可以指定文件指针的绝对位置,也可以指定文件指针的相对位置,语法如下:
UTL_FILE.FSEEK(
  fid IN utl_file.FILE_TYPE,
  absolute_offset IN PL_INTEGER DEFALUT NULL,
  relative_offset IN PL_INTEGER DEFALUT NULL);
如上所示,absolute_offset 用于指定文件的绝对位置,relative_offset 用于指定文件的相对位置(单位:字节),使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  DBMS_OUTPUT.PUT_LINE('起始位置'||'==>'||UTL_FILE.FGETPOS(HANDLE));
  UTL_FILE.fseek(HANDLE,5);
  DBMS_OUTPUT.PUT_LINE('现在位置'||'==>'||UTL_FILE.FGETPOS(HANDLE));
  UTL_FILE.FCLOSE(HANDLE);
END;
 
20、FREMOVE
该过程用于删除磁盘文件。语法如下:
UTL_FILE.FREMOVE(location IN VARCHAR2,filename IN VARCHAR2);
上面的location用于指定DIRECTORY,注意,这里也必须要大写,filename用于指定要删除的文件名,示例如下:
SQL> EXEC UTL_FILE.FREMOVE('CZW','NEW.TXT');
PL/SQL procedure successfully completed
 
21、FCOPY
该过程用于将源文件的全部或者部分内容复制到目标文件中。当使用该过程的时候,如果不设起始行和结束行,则将复制文件所有的内容。语法如下:
UTL_FILE.FCOPY(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  dest_dir IN VARCHAR2,
  dest_file IN VARCHAR2,
  start_line IN PLS_INTEGER DEFAULT 1,
  end_line IN PLS_INTEGER DEFALUT NULL);
上面location用于指定源文件所在的DIRECTORY对象,filename用于指定具体的文件名字,dest_dir指定希望复制到的文件的directory对象,dest_file用于指定目标文件的名称,start_line用于指定起始行号,end_line用于指定结束行号。
下面是UTL_FILE.FCOPY的例子:
SQL> exec UTL_FILE.FCOPY('CZW','DYWT.TXT','CZW','CZW.TXT');
PL/SQL procedure successfully completed
 
22、FRENAME
该过程用于修改已经存在的文件名字,其作用于UNIX的MV命令完全相同,在修改文件名字的时候,通过指定overwrite参数可以覆盖已经存在的文件。语法如下:
UTL_FILE.FRENAME(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  dest_dir IN VARCHAR2,
  dest_file IN VARCHAR2,
  overwrite IN BOOLEAN DEFAULT FALSE);
上面的,overwrite用于指定是否要覆盖已经存在的文件(false 不覆盖,true可以覆盖)例子如下:
SQL> exec UTL_FILE.FRENAME('CZW','CZW.TXT','CZW','HANJB.TXT')
PL/SQL procedure successfully completed

 

linux

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Terangkan peranan log redo innoDB dan membatalkan log.Terangkan peranan log redo innoDB dan membatalkan log.Apr 15, 2025 am 12:16 AM

InnoDB menggunakan redolog dan undologs untuk memastikan konsistensi dan kebolehpercayaan data. 1. Pengubahsuaian halaman data rekod untuk memastikan pemulihan kemalangan dan kegigihan transaksi. 2.UNDOLOGS merekodkan nilai data asal dan menyokong penggantian transaksi dan MVCC.

Apakah metrik utama untuk dicari dalam output yang dijelaskan (jenis, kunci, baris, tambahan)?Apakah metrik utama untuk dicari dalam output yang dijelaskan (jenis, kunci, baris, tambahan)?Apr 15, 2025 am 12:15 AM

Metrik utama untuk menjelaskan arahan termasuk jenis, kunci, baris, dan tambahan. 1) Jenis mencerminkan jenis akses pertanyaan. Semakin tinggi nilai, semakin tinggi kecekapan, seperti const adalah lebih baik daripada semua. 2) Kunci memaparkan indeks yang digunakan, dan null menunjukkan tiada indeks. 3) Baris menganggarkan bilangan baris yang diimbas, yang mempengaruhi prestasi pertanyaan. 4) Tambahan memberikan maklumat tambahan, seperti menggunakanFilesort meminta bahawa ia perlu dioptimumkan.

Apakah status sementara dalam menjelaskan dan bagaimana untuk mengelakkannya?Apakah status sementara dalam menjelaskan dan bagaimana untuk mengelakkannya?Apr 15, 2025 am 12:14 AM

MenggunakanTemary menunjukkan bahawa keperluan untuk membuat jadual sementara dalam pertanyaan MySQL, yang biasanya dijumpai di Orderby menggunakan lajur yang berbeza, GroupBy, atau tidak diindeks. Anda boleh mengelakkan berlakunya indeks dan menulis semula pertanyaan dan meningkatkan prestasi pertanyaan. Khususnya, apabila menggunakan pembelian muncul dalam menjelaskan output, ini bermakna MySQL perlu membuat jadual sementara untuk mengendalikan pertanyaan. Ini biasanya berlaku apabila: 1) deduplikasi atau pengelompokan apabila menggunakan yang berbeza atau kumpulan; 2) Susun apabila Orderby mengandungi lajur bukan indeks; 3) Gunakan subquery kompleks atau menyertai operasi. Kaedah Pengoptimuman termasuk: 1) Orderby dan GroupB

Huraikan tahap pengasingan urus niaga SQL yang berbeza (baca yang tidak komited, baca bacaan yang komited, berulang, bersiri) dan implikasinya dalam MySQL/InnoDB.Huraikan tahap pengasingan urus niaga SQL yang berbeza (baca yang tidak komited, baca bacaan yang komited, berulang, bersiri) dan implikasinya dalam MySQL/InnoDB.Apr 15, 2025 am 12:11 AM

MySQL/InnoDB menyokong empat tahap pengasingan transaksi: ReadUncommitted, ReadCommitted, RepeatableRead dan Serializable. 1. ReadoMuncommitted membolehkan membaca data yang tidak komited, yang boleh menyebabkan bacaan kotor. 2. 3.RepeatableRead adalah tahap lalai, mengelakkan bacaan kotor dan bacaan yang tidak boleh diulang, tetapi bacaan hantu mungkin berlaku. 4. Serializable mengelakkan semua masalah konkurensi tetapi mengurangkan kesesuaian. Memilih tahap pengasingan yang sesuai memerlukan keseimbangan data konsistensi dan keperluan prestasi.

MySQL vs Pangkalan Data Lain: Membandingkan PilihanMySQL vs Pangkalan Data Lain: Membandingkan PilihanApr 15, 2025 am 12:08 AM

MySQL sesuai untuk aplikasi web dan sistem pengurusan kandungan dan popular untuk sumber terbuka, prestasi tinggi dan kemudahan penggunaan. 1) Berbanding dengan PostgreSQL, MySQL melakukan lebih baik dalam pertanyaan mudah dan operasi membaca serentak yang tinggi. 2) Berbanding dengan Oracle, MySQL lebih popular di kalangan perusahaan kecil dan sederhana kerana sumber terbuka dan kos rendah. 3) Berbanding dengan Microsoft SQL Server, MySQL lebih sesuai untuk aplikasi silang platform. 4) Tidak seperti MongoDB, MySQL lebih sesuai untuk data berstruktur dan pemprosesan transaksi.

Bagaimanakah kardinaliti indeks MySQL mempengaruhi prestasi pertanyaan?Bagaimanakah kardinaliti indeks MySQL mempengaruhi prestasi pertanyaan?Apr 14, 2025 am 12:18 AM

Cardinality Indeks MySQL mempunyai kesan yang signifikan terhadap prestasi pertanyaan: 1. Indeks kardinaliti yang tinggi dapat lebih berkesan menyempitkan julat data dan meningkatkan kecekapan pertanyaan; 2. Indeks kardinaliti yang rendah boleh membawa kepada pengimbasan jadual penuh dan mengurangkan prestasi pertanyaan; 3. Dalam indeks bersama, urutan kardinaliti yang tinggi harus diletakkan di depan untuk mengoptimumkan pertanyaan.

MySQL: Sumber dan Tutorial untuk Pengguna BaruMySQL: Sumber dan Tutorial untuk Pengguna BaruApr 14, 2025 am 12:16 AM

Laluan pembelajaran MySQL termasuk pengetahuan asas, konsep teras, contoh penggunaan, dan teknik pengoptimuman. 1) Memahami konsep asas seperti jadual, baris, lajur, dan pertanyaan SQL. 2) Ketahui definisi, prinsip kerja dan kelebihan MySQL. 3) menguasai operasi CRUD asas dan penggunaan lanjutan, seperti indeks dan prosedur yang disimpan. 4) Biasa dengan debugging kesilapan biasa dan cadangan pengoptimuman prestasi, seperti penggunaan rasional indeks dan pertanyaan pengoptimuman. Melalui langkah -langkah ini, anda akan memahami sepenuhnya penggunaan dan pengoptimuman MySQL.

Mysql dunia nyata: Contoh dan kes penggunaanMysql dunia nyata: Contoh dan kes penggunaanApr 14, 2025 am 12:15 AM

Aplikasi dunia nyata MySQL termasuk reka bentuk pangkalan data asas dan pengoptimuman pertanyaan kompleks. 1) Penggunaan Asas: Digunakan untuk menyimpan dan mengurus data pengguna, seperti memasukkan, menanyakan, mengemas kini dan memadam maklumat pengguna. 2) Penggunaan lanjutan: Mengendalikan logik perniagaan yang kompleks, seperti perintah dan pengurusan inventori platform e-dagang. 3) Pengoptimuman Prestasi: Meningkatkan prestasi dengan menggunakan indeks, jadual partisi dan cache pertanyaan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).