oracle内置程序包
STANDARD和DBMS_STANDARD 定义和扩展PL/SQL语言环境
DBMS_ALERT 支持数据库事件的异步通知
DBMS_APPLICATION_INFO 允许为跟踪目的而注册应用程序
DBMS_AQ&DBMS_AQADM 管理oracle advanced queuing选件
DBMS_DEFER、DBMS_DEFER_SYS和DBMS_DEFER_QUERY 允许构建和管理延迟的远程过程调用
DBMS_DDL 某些DDL命令的pl/sql等效项
CALENDAR 提供日历维护功能
DBMS_DESCRIBE 描述存储子程序
DBMS_LOB 操纵LOB对象
DBMS_LOG 提供对 Oracle LOB数据类型进行操作的功能
DBMS_LOCK 用户定义的锁
DBMS_OUTPUT 处理PL/SQL 块和子程序输出调试信息
DBMS_SESSION 提供ALTER SESSION 命令的PL/SQL等效功能
DBMS_ROWID 获得ROWID 的详细信息
DBMS_RANDOM 提供随机生成器
DBMS_SQL 允许用户使用动态SQL,构造和执行任意DML和DDL语句
DBMS_JOB 提交和管理在数据库中执行的定时任务
DBMS_XMLDOM 用DOM模型读写XML类型的数据
DBMS_XMLPARSER XML解析,处理XML文档内容和结构
DBMS_XMLGEN 将SQL 查询结果转换为规范的XML格式
DBMS_XMLQUERY 提供将数据转换为XML类型的功能 DBMS_XSLPROCESSOR 提供XSLT功能. 转换XML文档
UTL_FILE 用PL/SQL程序来读写操作系统文本文件
DBMS_OUTPUT中的一些过程
Enable
Disable
Put 将字符放入缓冲区
Put_line 将缓冲区中数据输出并换行
New_line
Get_line
Get_lines
DBMS_LOB(只能由sys权限才能操作)
append
compare
copy
erase
fileclose
fileexists
filegetname
getlength
/*创建下载目录表,以记录下载的各种文件*/ Create Table DownFileList ( Id Varchar(20) Not Null Primary Key, Name Varchar(40) Not Null, FileLocation BFILE,/*文件存放位置*/ Description CLOB/*文件描述*/ )
insert into downfilelist values ('1001','oracle',BFILENAME(upper('filedir'),'oracle.txt'),'这是一本oracle的教程');
在select * from downfilelist;命令是,BFILE字段无法显示,需要使用Read函数读取。
read
declare tempdesc CLOB; iReadCount int; iStart int; sOutputDesc varchar(100); begin iReadCount:=5; iStart:=1; select description into tempdesc from downfilelist where id = '1001'; dbms_lob.read(tempdesc, ireadcount, istart, soutputdesc); dbms_output.put_line(soutputdesc); dbms_output.put_line(dbms_lob.getlength(tempdesc)); end;
write
declare tempDesc clob; iCount int; iStart int; sNewVar varchar(30); begin iCount:=3; iStart:=1; sNewVar:='new'; Select Description Into tempDesc From DownFileList Where id = '1001' For Update;--锁定本行为修改 行级锁 dbms_output.put_line('old:'|| tempdesc); dbms_lob.write(tempdesc,icount,istart, snewvar); dbms_output.put_line('new:'|| tempdesc); commit;--必须提交事务,否则该行一直处于锁定状态 end;
append
declare destDesc clob; srcdesc clob; begin select description into destdesc from downfilelist where id = '1001' for update; select description into srcdesc from downfilelist where id = '1002'; dbms_lob.append(destdesc, srcdesc); dbms_output.put_line(destdesc); rollback;--commit提交的话,即更改数据库中1001记录的description字段数据 end;
erase
declare
tempdesc clob;
icount int;
istart int;
begin
icount:=7;
istart:=1;
select description into tempdesc from downfilelist where id = '1001' for update;
dbms_lob.erase(tempdesc, icount, istart);
dbms_output.put_line(tempdesc);
rollback;--这里commit会更改数据库中值
end;
declare destdesc clob; srcdesc clob; icount int; ideststart int; isrcstart int; begin icount:=10; ideststart:=10; isrcstart:=1; select description into destdesc from downfilelist where id = '1001' for update; select description into srcdesc from downfilelist where id = '1002'; dbms_output.put_line(srcdesc); dbms_output.put_line(destdesc); dbms_lob.copy(destdesc, srcdesc, icount, ideststart, isrcstart); dbms_output.put_line(srcdesc); dbms_output.put_line(destdesc); rollback;--这里commit会更改数据库中值 end;
文件相关操作
declare tempBFile BFILE;--临时BFILE iFileExistsFlag int;--文件存在标志 iFileOpenFlag int;--文件打开标志 iOutputCount NUMBER(14);--输出数量 iStart int;--从第几个字符开始输出 sDirAlias varchar(40);--目录别名 sFileName varchar(30);--文件名 sOutputVar long;--输出结果 begin --从表中取出编号为1001的记录的文件定位信息 select filelocation into tempBFile from downfilelist where id = '1001'; --取出文件名 dbms_lob.filegetname(tempBFile,sDirAlias,sFileName); --检查文件是否存在 iFileExistsFlag := dbms_lob.fileexists(tempbfile); if ifileexistsflag = 1 then dbms_output.put_line(sDirAlias||'/'||sFileName||' 存在'); else dbms_output.put_line('文件不存在'); Goto EndBlock; end if; --打开文件 iFileOpenFlag := dbms_lob.fileisopen(tempbfile); if ifileopenflag = 1 then dbms_output.put_line('文件已经打开'); Goto EndBlock; else dbms_output.put_line('正在打开文件。。。'); dbms_lob.fileopen(tempBFile); end if; --输出字符 iOutputCount:=255;--输出字符数量 iStart:=1;--开始字符数 dbms_lob.read(tempbfile, ioutputcount, istart, soutputvar); dbms_output.put_line('文件第'||iStart||'开始的'|| ioutputcount||'个字符为:'); dbms_output.put_line(soutputvar); --关闭文件 dbms_output.put_line('正在关闭文件。。。'); dbms_lob.fileclose(tempBFile); dbms_output.put_line('文件正常关闭'); <> null; exception when No_Data_Found then dbms_output.put_line('没有相应记录'); when OTHERS then dbms_output.put_line(SQLCODE||' '||SQLERRM); end;
读取文件使用二进制ascall码读取
FILEDIR/oracle.txt 存在
正在打开文件。。。
文件第1开始的30个字符为:
6F7261636C656F7261636C656F7261636C656F7261636C656F7261636C65
正在关闭文件。。。
文件正常关闭
编码问题始终很头痛。。。没找到方法显示出来。。。