天天看點

Oracle的dbms_output包的put()和put_line()的差別隻是有沒有回車換行嗎?(轉)

答案是否

除了自動添加回車換行外,還有就是緩沖區最大容量的問題!!

無論如何設定serveroutput size,10g裡

put() 最多隻能輸出 32767 個byte

put_line() 的最大容量為 1000000個byte

以下的代碼目的是生成一個oracle資料庫的使用者自定義的存儲過程和函數!如果你的使用者代碼足夠長(大于32767),就會發現

使用put()會報錯,而使用put_line()不會報錯!

不過問題是:使用put_line()獲得的代碼都會插入一個空行,十分不爽!我目前還沒想到解決方法,若高手指點,不勝感謝!

declare

    tablename varchar2(30) := '%';

begin

    for objname in (select distinct TYPE, name

                    from   user_source

                    where  TYPE in ('PROCEDURE', 'FUNCTION')

                           and name like tablename

                    order  by TYPE, name)

    loop

        dbms_output.enable(10000000);

        dbms_output.put('CREATE OR REPLACE' || ' ');

        for output in (select text

                       from   user_source

                       where  name = objname.name

                              and TYPE in ('PROCEDURE', 'FUNCTION')

                       order  by TYPE, name, line)

        loop

/*         dbms_output.put(output.text); --如果使用put則會報錯 */

            dbms_output.put_line(output.text);

        end loop;

        dbms_output.put_line('/');

    end loop;

end;

http://www.cnblogs.com/jinzhenshui/archive/2009/01/01/1366404.html