UTL_FILE 包使用介绍
Postgresql 不支持 package功能,这给oracle 向 postgresql迁移增加了很多迁移工作。人大金仓Kingbase数据库实现了类似 oracle package 功能,并提供了许多oracle 环境下常用的package。
本篇介绍 Kingbase UTL_FILE 包。
一、create extension and directory
UTL_FILE 包是通过扩展插件的形式实现的。
test=# create extension utl_file;
CREATE EXTENSION test=# create or replace directory tmp_dir as '/home/kb86/utl_tmp';
CREATE DIRECTORY
注意:与oracle 不同,oracle directory 需要明确授权给用户,而 kingbase 不需要授权,且不同数据库用户可以共同写一个文件。这个个人觉得应该是权限控制不到位,后续还需完善。
二、UTL_FILE 包函数
UTL_FILE 包含的函数:
test=# \dx+ utl_file;
Objects in extension "utl_file"
Object description
------------------------------------------------------
function utl_file_fclose_all()
function utl_file_fclose(integer)
function utl_file_fflush(integer)
function utl_file_fopen(text,text,text,integer)
function utl_file_fopen(text,text,text,integer,name)
function utl_file_get_line(integer)
function utl_file_get_line(integer,integer)
function utl_file_new_line(integer)
function utl_file_new_line(integer,integer)
function utl_file_put(integer,anyelement)
function utl_file_put(integer,text)
function utl_file_put_line(integer,text)
function utl_file_put_line(integer,text,boolean)
package utl_file
type "utl_file.file_type"
具体函数功能如下:
UTL_FILE.FOPEN ( Location IN VARCHAR2, Filename IN VARCHAR2, Open_mode IN VARCHAR2, Max_linesize IN INT);
功能:打开一个文件,返回一个文件句柄。这里Max_linesize 表示每行最大的字节数。
Open_mode 支持以下几种:
r –只读(文本)
w – 只写(本文)。如果文件已存在,会清空原文件。
a – 追加(文本)。在文件后面添加内容。
UTL_FILE.PUT_LINE ( File IN UTL_FILE.FILE_TYPE, Buffer IN VARCHAR2, Autoflush IN BOOLEAN DEFAULT FALSE);
功能:在文件中写入一行内容,无返回值。
UTL_FILE.NEW_LINE ( File IN UTL_FILE.FILE_TYPE, Lines IN NATURAL:=1 );
功能:写入空行,无返回值。
UTL_FILE.GET_LINE ( File IN UTL_FILE.FILE_TYPE, Buffer OUT VARCHAR2, Linesize IN NUMBER, Len IN integer DEFAULT NULL);
功能:用于从已经打开的文件中读取行内容。
UTL_FILE.FCLOSE_ALL;
功能:将会关闭本次session所有打开的文件。
UTL_FILE.FFLUSH
功能:强制将缓冲的数据写入文件。
UTL_FILE.PUT
功能:写入内容到文件中,不带换行符,通常与 new_line 一起使用。
三、使用例子
例子一:
create or replace procedure test_fopen(
v_out_data in varchar2
)
as
declare
out_data varchar2(30000);
file_handle utl_file.FILE_TYPE;
file_name varchar2(1000) default 'output.txt';
begin
out_data := v_out_data;
file_handle := utl_file.fopen('tmp_dir', file_name, 'a', 30);
utl_file.put_line(file_handle, out_data);
utl_file.fclose(file_handle);
end test_fopen;
例子二:
create or replace procedure test_get_line()
as
declare
vinhandle utl_file.file_type;
vnewline varchar2(250);
begin
vinhandle := utl_file.fopen('tmp_dir', 'output.txt','r');
loop
begin
utl_file.get_line(vinhandle, vnewline);
dbms_output.put_line(vnewline);
exception
when others then
exit;
end;
end loop;
utl_file.fclose(vinhandle);
end test_get_line;
UTL_FILE 包使用介绍的更多相关文章
- Oracle之UTL_FILE 包用法详解
[转自] http://zhangzhongjie.iteye.com/blog/1903024 UTL_FILE包可以用来读写操作系统上的文本文件,UTL_FILE提供了在客户端(FORM等等)和服 ...
- oracle中utl_file包读写文件操作实例学习
在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create ...
- ORACLE之UTL_FILE包详解
1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录. 方法: ...
- SSH框架应用中常用Jar包用途介绍
struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...
- jar包和war包的介绍和区别
jar包和war包的介绍和区别 Java程序员的日常 关注 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介绍 JAR(Java Arc ...
- Wireshark wireshake数据包分割及捕包过滤器介绍
wireshake数据包分割及捕包过滤器介绍 by:授客 QQ:1033553122 wireshake自带工具editcap分割数据包 操作: 进入到目录,然后 editcap.exe -c < ...
- Java中包的介绍
包的介绍: 未命名包 命名包 可以避免类名重复 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2. ...
- jar包和war包的介绍和区别(转载)
来源:https://www.jianshu.com/p/3b5c45e8e5bd 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介绍 ...
随机推荐
- node图片压缩的两员大将
一.ishrink 全局安装 npm i ishrink -g 1.按url方式压缩 本地图片地址 sk -u C:\Users\admin\Desktop\images\img 网络图片地址 sk ...
- Vue动态组件的实践与原理探究
我司有一个工作台搭建产品,允许通过拖拽小部件的方式来搭建一个工作台页面,平台内置了一些常用小部件,另外也允许自行开发小部件上传使用,本文会从实践的角度来介绍其实现原理. ps.本文项目使用Vue CL ...
- Python程序入口 __name__ == ‘__main__‘ 有重要功能(多线程)而非编程习惯
文章来源于互联网(https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 在Python中,被称为「程序的入口」的 if name =='main': 总是出现在各种示 ...
- ASPNET Core笔试题
1.如何在ASP.NET Core中激活Session功能? 首先要添加session包. 其次要在configservice方法里面添加session.然后又在configure方法里面调用 use ...
- (零)机器学习入门与经典算法之numpy的基本操作
1.根据索引来获取元素* 创建一个索引列表ind,用来装载索引,当numpy数据是一维数据时:一个索引对应的是一个元素具体的例子如下: import numpy as np # 数据是一维数据时:索引 ...
- string的底层实现
String底层实现 string在C++也是一个重要的知识,但是想要用好它,就要知道它的底层是如何写的,才能更好的用好这个string,那么这次就来实现string的底层,但是string的接口功能 ...
- C++基本数据类型范围和区别(详细)
一.基本类型的大小及范围的总结(以下所讲都是默认在32位操作系统下):字节:byte:位:bit.1.短整型short:所占内存大小:2byte=16bit:所能表示范围:-32768~32767:( ...
- 10分钟带你进入Swagger的世界,快来看一看吧
什么是Swagger? 如下引用swagger官方的解释 Swagger is a powerful yet easy-to-use suite of API developer tools for ...
- kube-scheduler的调度上下文
前一章节了解到了kube-scheduler中的概念,该章节则对调度上下文的源码进行分析 Scheduler Scheduler 是整个 kube-scheduler 的一个 structure,提供 ...
- 多人共用一个Linux用户, 实现Bash配置文件独立
本文中提到的 账户, 用户 均表示同一概念. 例如 ssh wbourne@192.168.xxx.101, 账户, 用户 指的均是 wbourne. 背景 在工作中, 我们经常会连接Linux服务器 ...