代码改变世界

触发器-6

2012-03-26 09:59  java ee spring  阅读(175)  评论(0编辑  收藏  举报

--内置程序包

 

--案例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!';
  begin
  dbms_output.put(str);
  dbms_output.put_line('good');--具有显示功能
  end;
 
/*这里面由于有两次将变量值保存到缓存中,所以打印时将缓存里面所有的值显示出来*/


--案例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;
begin
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);
end;


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

declare
  tempdesc clob;
  icount int;
  istart int;
  snewvar  varchar2(30);
begin
  icount:=2;
  istart:=1;
  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;  /*修改完数据后需要解锁所以提交否则别的用户不能使用数据*/
end;

select * from downfilelist where id=00001;