Chinaunix首页 | 论坛 | 博客
  • 博客访问: 980752
  • 博文数量: 358
  • 博客积分: 8185
  • 博客等级: 中将
  • 技术积分: 3751
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:27
个人简介

The views and opinions expressed all for my own,only for study and test, not reflect the views of Any Company and its affiliates.

文章分类

全部博文(358)

文章存档

2012年(8)

2011年(18)

2010年(50)

2009年(218)

2008年(64)

我的朋友

分类: Oracle

2009-01-20 08:20:17

1.最基本的DBMS_OUTPUT.PUT_LINE()方法。
    随便在什么地方,只要是BEGIN和END之间,就可以使用DBMS_OUTPUT.PUT_LINE(output);
    然而这会有一个问题,就是使用该函数一次最多只可以显示255个字符,否则缓冲区会溢出。
    此外,函数DBMS_OUTPUT.ENABLE(20000)这种函数,仅仅是设置整个过程的全部输出缓冲区大小,而非DBMS_OUTPUT.PUT_LINE()的缓冲区大小。
    对于超过255个字符的变量,使用DBMS_OUTPUT.PUT_LINE()方法是没有效的。据说在Oracle10中,解除了这个限制,可以输出任意大小的字符串。
declare
    output varchar2(200);
begin
    output:='...';   //赋值
    DBMS_OUTPUT.PUT_LINE(output);
end;

2.使用表的方法。
     首先建立一张表,然后在PL/SQL中将要输出的内容插到表中。然后再从表中查看内容。对于这种方法一次可以输出几千个字符。
(1) create table my_output{
        id number(4),
        txt varchar2(4000)  
    );

(2) declare
        output varchar2(4000);
        strSql varchar2(4500);
        count number(4):=0;
    begin
        strSql:='delete * from my_output';
        EXECUTE IMMEDIATE strSql;
    
        output:='...'; //赋值
        count:=count+1;
        strSql:='Insert into my_output value (count,'''||output||''')';
        --''在单引号中相当于字符'
        EXECUTE IMMEDIATE strSql;
    end;
3.使用输出文件的方法。
      如果变量非常大,以致连使用表都没有办法插入时,只有使用文件方式了。
(1) create or replace directory TMP as 'd:\testtmp';
    --建立一个文件夹路径
(2) declare
        file_handle UTL_FILE.FILE_TYPE;
        output varchar2(30000);
    begin
        output:="....";
        file_handle := UTL_FILE.FOPEN('TMP', 'output.txt', 'w',[1-32767]);
        --四个参数:目录,文件名,打开方式,最大行数(默认为2000)
        UTL_FILE.PUT_LINE(file_handle, output);
        UTL_FILE.FCLOSE(file_handle);
    exception
        WHEN utl_file.invalid_path THEN
        raise_application_error(-20000, 'ERROR: Invalid path for file or path not in INIT.ORA.');
    end;
阅读(667) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~