我有一个存储过程  里面使用了dbms_output输出结果但是别人执行时总是忘了set serveroutput on有没有办法在存储过程里面执行这个操作?或者有没有什么输出函数,不需要set serverooutput on也能输出

解决方案 »

  1.   

    别人调用你的函数,就让他去set好了。
    输出的结果只是为了调试而已,如果你输出的结果有用的话,直接out参数输出啊
      

  2.   

    我写的存储过程是目的就是输出日志,调用者输入日志内容,存储过程里会对内容做处理,格式化然后打印(可以算是一个统一的日志api)现在出现的问题是,虽然所有人写日志都使用了我这个存储过程了。 但是经常出现调用存储过程时忘了先执行set serveroutput on导致日志无法输出特别是那些晚上在后台执行的存储过程,没日志基本白跑了===========================
    所以我希望能尽量减少使用者出错的机会,在存储过程里面自动执行set serverout on
      

  3.   

    我唯一不清楚的就是打印在cmd的信息和没有信息有什么区别。你还能让他们去复制粘贴?
      

  4.   


    问题同个人认为,直接在过程中调用set,我觉得不可行,因为set是sqlplus的命令,不是pl/sql编程语言的命令
    要搞这个问题,还要区分使用的环境
    说白了,如果在sqlplus 中执行过程,可以通过过程修改本机的glogin.sql文件,达到执行set serveroutput on的效果
    但是这个效果在plsql dev里不生效。
      

  5.   


    我们是在unix 后台调用sqlplus  将输出重定向到日志文件
      

  6.   


    我们是在unix 后台调用sqlplus  将输出重定向到日志文件那你还不如直接在存储过程里用utl_file去写日志。
      

  7.   


    我们是在unix 后台调用sqlplus  将输出重定向到日志文件那你还不如直接在存储过程里用utl_file去写日志。utl_file 要建directory 我们没权限   (数据库不是我们管的)
      

  8.   

    考虑过,但是1是写日志表怕速度比较慢,因为有时候输出的日志还是比较多的另外一个是,一回滚 所有日志全丢了  达不到日志效果同学,oracle有个东西叫自治事物,专注处理异常时候写日志,你可以试一试
      

  9.   

    那只能写个规范了  让他们严格执行  先执行set serveroutput on呗
      

  10.   

    考虑过,但是1是写日志表怕速度比较慢,因为有时候输出的日志还是比较多的另外一个是,一回滚 所有日志全丢了  达不到日志效果同学,oracle有个东西叫自治事物,专注处理异常时候写日志,你可以试一试这个我曾经考虑过,被人否决了 原因是一个存储过程,可能会写成百上千条日志用自治事务就要产生成百上千个事务,数据库资源占用太大了除非能保证日志一个事务,程序一个事务 即调一次存储过程产生两个不同的事务