天天看点

触发器-6

--内置程序包

--案例15:验证dbms_output设置选项

SQL>set serveroutput on

SQL> set serveroutput on

SQL> set serveroutput on size 5000

 declare

   str varchar2(20):='hello world!';

  begin

  dbms_output.put(str);  /*结果屏幕上不会显示任何东西,dbms_output.put不具备显示功能*/

  end;

 declare

  str varchar2(20):='hello world!';

  dbms_output.put(str);

  dbms_output.put_line('good');--具有显示功能

/*这里面由于有两次将变量值保存到缓存中,所以打印时将缓存里面所有的值显示出来*/

--案例16-02:演示DBMS_LOB使用

--01.新建表

create table downfilelist

(

id varchar(20) not null primary key,

name varchar(40) not null,  /*文件存放位置*/

filelocation bfile,  /*文件描述*/

description clob

);

--02.新建需要的目录

/*

新建目录格式:;

create or replace directory  目录名 as  ‘本地或网络共享路径名’;

*/

create or replace directory filedir as 'f:\downlist' ;

--或

create or replace directory filedir as '\\servername\downlist' ;

--03.对表的中数据操作

-a.插入数据到表中,对bfile类型的字段使用bfilename函数

insert into downfilelist values ('00001', 'java入门', bfilename(upper('filedir'), 'java.zip'), '这是一本使你快速学会的java教材');

-b.更新lob

select description from downfilelist where id='00001';

update downfilelist set description ='这是一本使你快速学会oracle的书', filelocation=bfilename(upper('filedir'), 'oracle.zip')

where id='00001';

select id, name, description from downfilelist;  /*在sqlplus中需要这样写否则无法显示或则不能写:

select * from downfilelist;

--案例16-02:演示DBMS_LOB使用:read

declare

tempdesc clob;

ireadcount int;

istart int;

soutputdesc varchar(100);

begin

  ireadcount:=5;

  istart:=1;

  select description into tempdesc from downfilelist where id='00001';

dbms_lob.read(tempdesc, ireadcount, istart, soutputdesc); /*从istart取值,取ireadcont个*/

dbms_output.put_line('前五个字符是:'||soutputdesc);

end;

--案例16-03:演示DBMS_LOB使用:getlength

/*统计字符串长度*/

declare

  tempclob clob;

  ilen int;

select description into tempclob from downfilelist where id='00001';

ilen:=dbms_lob.getlength(tempclob);

dbms_output.put_line('描述的字段长度为:'||ilen);

exception

  when others then

   dbms_output.put_line(sqlcode || '  ' ||sqlerrm);

--案例16-03:演示DBMS_LOB使用:write

  tempdesc clob;

  icount int;

  istart int;

  snewvar  varchar2(30);

  icount:=2;

  snewvar:='这是非常畅销的书';

  select description into tempdesc from downfilelist

   where id='00001' for update;

   /*修改大数据时可能速度很慢所以锁定以便提高速度*/

dbms_output.put_line('更改前::'||tempdesc);

dbms_output.put_line('从' ||istart || '开始的'||icount ||'个字符将被改写成:'||snewvar);

dbms_lob.write(tempdesc, icount, istart, snewvar);

commit;  /*修改完数据后需要解锁所以提交否则别的用户不能使用数据*/