精华内容
下载资源
问答
  • dbms_output.put_line()
    2021-01-28 04:09:47

    dbms_output作为ORACLE的一个内置包,是作为输出信息的集合包:

    如果想要dbms_output.put_line()等方法的输出能够在客户端看见的话,请

    set serverouput on;

    例子:

    declare

    empname emp.ename%type;

    sno emp.empno%type;

    iCount int:=0;

    begin

    sno:='7369';

    empname:='jade';

    dbms_output.put_line('employee no is '||sno||' employee name is '||empname);

    select empno,ename into sno,empname from emp where empno='7369';

    dbms_output.put_line('employee no is '||sno||' employee name is '||empname);

    select count(*) into iCount from emp where sal>2000;

    if iCount>0   then

    dbms_output.put_line('有工资大于2000的人的信息'||iCount);

    else

    dbms_output.put_line('没有');

    end if;

    end;

    异常

    如同JVM一样,Oralce是最终异常处理人员;但是他们的处理结果对用户而言是不好理解的,因为他们的语言是如此地不友好,如此的ugly;

    所以我们最好是自己捕获处理异常;

    步骤:

    1.声明异常

    2.引发异常

    3.处理异常

    类型:

    1, 预定义的异常:不需要显式声明;dbms_standard程序包里有定义;

    例子:     dbms_output.put_line('employee job is '||empjob);

    exception

    when no_data_found then

    dbms_output.put_line('no data return');

    如果不处理异常,程序就会报告Error而不是异常,不同于Java;

    但是程序流程是一样的,出错后,后面的代码都不再执行,直接退出;

    用户处理的话,出错后,处理后,其他的可以继续执行错误处理后面的代码,这和Java一样;

    When others then

    处理动作;

    这里的others表示未知的异常发生时;这是个很保险的方法,类似用Exception的效果;其他的异常都是others的一个子类型;

    2, 非预定义的异常:数据库本身不知道不能控制的,比如操作系统崩溃;

    Oralce服务器错误

    网络或者机器I/O错误

    3, 用户定义的异常:有个类型叫exception类型

    例子:

    1   declare

    2         dup_value exception;

    3         icount int:=0;

    4   begin

    5         select count(*) into icount from place

    6             where placeid='001';

    7         if icount>0 then

    8                raise dup_value;

    9         end if;

    10   exception

    11         when dup_value then

    12              dbms_output.put_line('already have the note');

    13* end;

    already have the note

    更多相关内容
  • dbms_output.put_line的用法 涉及到的知识点如下: 1、enable: 在serveroutput on的情况下,用来使dbms_output生效(默认即打开) set serveroutput on --将output 服务打开 2、disable: 在serveroutput on...

    dbms_output.put_line的用法

    涉及到的知识点如下:

    1、enable:

    在serveroutput on的情况下,用来使dbms_output生效(默认即打开)

    set serveroutput on --将output 服务打开
    

    2、disable:

    在serveroutput on的情况下,用来使dbms_output失效

    set serveroutput off --将output 服务关闭
    

     

     

    3、put:

    将内容写到内存,等到put_line时一起输出,new_line的时候也可以输出。

    begin
      dbms_output.put_line('hello world1111111');
      dbms_output.new_line();
      dbms_output.put('Hello, Lao An ');
      dbms_output.put('Hello, Lao An ');
      dbms_output.new_line();
      dbms_output.put_line('Hello, Lao An ');
    end;
    /

    输出:

    4、put_line:

    不用多说了,输出字符,并刷新buffer,前提是set severoutput on;

    exec dbms_output.put_line('hello world1111111');

    5、new_line:

    作为一行的结束,可以理解为写入buffer时的换行符

    set serveroutput on
    begin
      dbms_output.put_line('hello world1111111');
      dbms_output.put('Hello, Lao An');
      dbms_output.new_line();
      dbms_output.put_line('Hello, Lao An');
    end;
    /

    这里运用了begin+/来执行PL/SQL过程,我解释一下oracle中斜杠(/)的含义
    斜杠就是让服务器执行前面所写的sql脚本。如果是普通的select语句,一个分号,就可以执行了。但是如果是存储过程,那么遇到分号,就不能马上执行了。这个时候,就需要通过斜杠(/)来执行。

     

     

    6、get_line(value, index):

    获取缓冲区的单行信息。

    注:使用get_line时不能用put_line输出,因为put_line之后会将buffer清空。(当然在serveroutput off的情况下put_line是不影响buffer的)。

    7、get_lines(array, index):

    以数组形式来获取缓冲区的多行信息

    declare
       v_data dbms_output.chararr;   --先声明局部变量                       
       v_numlines number;                                   
    begin                                               
       --enable the buffer first.                          
       dbms_output.enable(1000000);   --设置缓冲区的大小                      
                                                          
       dbms_output.put_line('line one');                    
       dbms_output.put_line('line two');                    
       dbms_output.put_line('line three');                 
                                                          
       v_numlines := 3;                                    
       dbms_output.get_lines(v_data, v_numlines);  --array, index        
       for v_counter in 1..v_numlines loop                 
           dbms_output.put_line(v_data(v_counter));            
       end loop;                                           
    end;                                                
    /

     输出:

     

    展开全文
  • oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?我需要在pl / sql中进行调试以计算过程次数,我想使用:SELECT systimestamp FROM dual INTO time_db;DBMS_OUTPUT.PUT_LINE('time before procedure ' || ...

    oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?

    我需要在pl / sql中进行调试以计算过程次数,我想使用:

    SELECT systimestamp FROM dual INTO time_db;

    DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);

    但我不知道输出将到达何处,以及如何将其重定向到包含我要收集的所有数据的日志文件?

    10个解决方案

    37 votes

    DBMS_OUTPUT并不是最佳的调试工具,因为大多数环境都不是本地使用的。 但是,如果要捕获DBMS_OUTPUT的输出,则只需使用DBMS_OUTPUT.get_line过程。

    这是一个小例子:

    SQL> create directory tmp as '/tmp/';

    Directory created

    SQL> CREATE OR REPLACE PROCEDURE write_log AS

    2 l_line VARCHAR2(255);

    3 l_done NUMBER;

    4 l_file utl_file.file_type;

    5 BEGIN

    6 l_file := utl_file.fopen('TMP', 'foo.log', 'A');

    7 LOOP

    8 EXIT WHEN l_done = 1;

    9 dbms_output.get_line(l_line, l_done);

    10 utl_file.put_line(l_file, l_line);

    11 END LOOP;

    12 utl_file.fflush(l_file);

    13 utl_file.fclose(l_file);

    14 END write_log;

    15 /

    Procedure created

    SQL> BEGIN

    2 dbms_output.enable(100000);

    3 -- write something to DBMS_OUTPUT

    4 dbms_output.put_line('this is a test');

    5 -- write the content of the buffer to a file

    6 write_log;

    7 END;

    8 /

    PL/SQL procedure successfully completed

    SQL> host cat /tmp/foo.log

    this is a test

    Vincent Malgrat answered 2020-07-06T02:11:24Z

    31 votes

    作为写文件的替代方法,写表如何? 除了调用DBMS_OUTPUT.PUT_LINE,您还可以调用自己的DEBUG.OUTPUT过程,例如:

    procedure output (p_text varchar2) is

    pragma autonomous_transaction;

    begin

    if g_debugging then

    insert into debug_messages (username, datetime, text)

    values (user, sysdate, p_text);

    commit;

    end if;

    end;

    自主事务的使用使您可以保留由回滚的事务(例如,引发异常后)产生的调试消息,就像使用文件时那样。

    g_debugging布尔变量是一个程序包变量,可以在需要调试输出时将其默认设置为false并设置为true。

    当然,您需要管理该表,以使其不会永远增长! 一种方法是每天/每周运行一次的作业,并删除所有“旧”的调试消息。

    Tony Andrews answered 2020-07-06T02:11:57Z

    14 votes

    用将serveroutput设置为on;

    例如:

    set serveroutput on;

    DECLARE

    x NUMBER;

    BEGIN

    x := 72600;

    dbms_output.put_line('The variable X = '); dbms_output.put_line(x);

    END;

    Mahmoud Hanafy answered 2020-07-06T02:12:21Z

    14 votes

    如果您只是在SQL Plus中测试PL / SQL,则可以将其定向到以下文件:

    spool output.txt

    set serveroutput on

    begin

    SELECT systimestamp FROM dual INTO time_db;

    DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);

    end;

    /

    spool off

    像Toad和SQL Developer这样的IDE可以通过其他方式捕获输出,但是我不熟悉该怎么做。

    Tony Andrews answered 2020-07-06T02:12:46Z

    5 votes

    除了Tony的答案之外,如果您想查找PL / SQL程序在哪里花时间,也值得一看Oracle PL / SQL文档的这一部分。

    Ian Carpenter answered 2020-07-06T02:13:07Z

    3 votes

    使用UTL_FILE而不是DBMS_OUTPUT将输出重定向到文件:

    [HTTP://哦Reilly.com/catalog/Oracle把IP/chapter/吃06.HTML]

    Rafa de Castro answered 2020-07-06T02:13:31Z

    3 votes

    另外,请记住,所有这些输出都是在服务器端生成的。

    使用DBMS_OUTPUT,文本将在执行查询时在服务器中生成并存储在缓冲区中。 服务器完成查询数据检索后,它将重定向到您的客户端应用程序。 也就是说,仅在查询结束时才获得此信息。

    使用UTL_FILE,所有记录的信息将存储在服务器中的文件中。 执行完成后,您将必须导航至该文件以获取信息。

    希望这可以帮助。

    Juan Calero answered 2020-07-06T02:14:05Z

    1 votes

    可以将文件直接写入托管数据库的DB服务器,并且随着PL / SQL程序的执行而改变。

    这使用Oracle目录TMP_DIR; 您必须声明它,并创建以下过程:

    CREATE OR REPLACE PROCEDURE write_log(p_log varchar2)

    -- file mode; thisrequires

    --- CREATE OR REPLACE DIRECTORY TMP_DIR as '/directory/where/oracle/can/write/on/DB_server/';

    AS

    l_file utl_file.file_type;

    BEGIN

    l_file := utl_file.fopen('TMP_DIR', 'my_output.log', 'A');

    utl_file.put_line(l_file, p_log);

    utl_file.fflush(l_file);

    utl_file.fclose(l_file);

    END write_log;

    /

    这里是如何使用它:

    1)从您的SQL * PLUS客户端启动它:

    BEGIN

    write_log('this is a test');

    for i in 1..100 loop

    DBMS_LOCK.sleep(1);

    write_log('iter=' || i);

    end loop;

    write_log('test complete');

    END;

    /

    2)在数据库服务器上,打开一个shell并

    tail -f -n500 /directory/where/oracle/can/write/on/DB_server/my_output.log

    J. Chomel answered 2020-07-06T02:14:42Z

    -1 votes

    旧线程,但是还有另一种选择。

    从9i开始,您可以使用流水线表功能。

    首先,创建一个类型作为varchar表:

    CREATE TYPE t_string_max IS TABLE OF VARCHAR2(32767);

    其次,将代码包装在流水线函数声明中:

    CREATE FUNCTION fn_foo (bar VARCHAR2) -- your params

    RETURN t_string_max PIPELINED IS

    -- your vars

    BEGIN

    -- your code

    END;

    /

    将所有DBMS_OUTPUT.PUT_LINE替换为PIPE ROW。

    最后,这样称呼它:

    SELECT * FROM TABLE(fn_foo('param'));

    希望能帮助到你。

    Felypp Oliveira answered 2020-07-06T02:15:28Z

    -4 votes

    试试这个:

    SELECT systimestamp INTO time_db FROM dual ;

    DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);

    Mark answered 2020-07-06T02:15:48Z

    展开全文
  • Oracle的DBMS_OUTPUT.PUT_LINE用法

    千次阅读 2021-05-03 05:07:13
    打印至控制台(有显示):SET SERVEROUTPUT ONBEGINDBMS_.../如果想要dbms_output.put_line()等方法的输出能够在客户端看见的话,请set serverouput on;例子:declareempname emp.ename%type;sno emp.empno%type;iCount...

    打印至控制台(有显示):

    SET SERVEROUTPUT ON

    BEGIN

    DBMS_OUTPUT.PUT_LINE('Hey look, Ma!');

    END;

    /

    如果想要dbms_output.put_line()等方法的输出能够在客户端看见的话,请

    set serverouput on;

    例子:

    declare

    empname emp.ename%type;

    sno emp.empno%type;

    iCount int:=0;

    begin

    sno:='7369';

    empname:='jade';

    dbms_output.put_line('employee no is '||sno||' employee name is '||empname);

    select empno,ename into sno,empname from emp where empno='7369';

    dbms_output.put_line('employee no is '||sno||' employee name is '||empname);

    select count(*) into iCount from emp where sal>2000;

    if iCount>0  then

    dbms_output.put_line('有工资大于2000的人的信息'||iCount);

    else

    dbms_output.put_line('没有');

    end if;

    end;

    异常

    如同JVM一样,Oralce是最终异常处理人员;但是他们的处理结果对用户而言是不好理解的,因为他们的语言是如此地不友好,如此的ugly;

    所以我们最好是自己捕获处理异常;

    步骤:

    1.声明异常

    2.引发异常

    3.处理异常

    类型:

    1,预定义的异常:不需要显式声明;dbms_standard程序包里有定义;

    例子:    dbms_output.put_line('employee job is '||empjob);

    exception

    when no_data_found then

    dbms_output.put_line('no data return');

    如果不处理异常,程序就会报告Error而不是异常,不同于Java;

    但是程序流程是一样的,出错后,后面的代码都不再执行,直接退出;

    用户处理的话,出错后,处理后,其他的可以继续执行错误处理后面的代码,这和Java一样;

    When others then

    处理动作;

    这里的others表示未知的异常发生时;这是个很保险的方法,类似用Exception的效果;其他的异常都是others的一个子类型;

    2,非预定义的异常:数据库本身不知道不能控制的,比如操作系统崩溃;

    Oralce服务器错误

    网络或者机器I/O错误

    3,用户定义的异常:有个类型叫exception类型

    例子:

    1  declare

    2        dup_value exception;

    3        icount int:=0;

    4  begin

    5        select count(*) into icount from place

    6            where placeid='001';

    7        if icount>0 then

    8raise dup_value;

    9        end if;

    10  exception

    11        when dup_value then

    12             dbms_output.put_line('already have the note');

    13* end;

    already have the note

    展开全文
  • oralce在执行存储过程时如果要显示DBMS_OUTPUT.PUT_LINE()的输出信息,要在开启serveroutput。在sqlplus中set serveroutput on即可。DBMS_OUTPUT.PUT_LINE()输出信息分割符为||。CREATE OR REPLACE PROCEDURE stu_...
  • dbms_output.put_line使用方法 | 学步园

    千次阅读 2021-03-03 18:12:57
    begindbms_output.put_line('a') ;end;---------------------------------------------------------------------------------------------------------------------------------------------------如果你是再SQL*...
  • Oracle dbms_output.put_line用于输出打印信息 postgresql使用raise notice打印信息 改写例子: Oracle原写法 DBMS_OUTPUT.PUT_LINE('PROCEDURE [P_ASD] BEGIN … ’ || TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS’...
  • 解决dbms_output.put_line输出长度限制 设置dbms_output.enable(n); n为一个比较大的数值,即长度大于即将输出的内容。 如下函数是将输出的长段内容逐行输出的存储过程,可替代dbms_output.put_line使用。 ...
  • declare cursor x is with v1 as (select * from 表名 where rownum<11) select * from v1;begin for y in x loop dbms_output.put_line (y.字段名); end loop;end;
  • 在学习Oracle的过程中学到匿名语句块在执行过程中发现控制台打印输出DBMS_OUTPUT.PUT_LINE(vename||’过节费’||vmsg);的时候并不显示。 一下是我的数据库代码 declare vename varchar2(20); vsal_comm emp.sal...
  • ORACLE中dbms_output.put_line输出问题

    万次阅读 2019-06-12 11:18:33
    ORACLE中dbms_output.put_line输出问题1. 开启oracle输出2. 用sqlplus 登陆oracle3. pl/sql执行输出语句 最近写了oracle过程,有个ORACLE中dbms_output.put_line输出不了的问题。 花了近一个小时。下面描述一个这...
  • Oracle - dbms_output.put_line()

    千次阅读 2019-04-22 23:57:51
    --SET SERVEROUTPUT ON; DECLARE SENTENSE VARCHAR(30); BEGIN SENTENSE := 'Hello SQL!... dbms_output.put_line(SENTENSE||'--->'||'Pass!'); dbms_output.put_line('Hello Oracle!'||'--->...
  • PostgreSQL , Oracle , DBMS_OUTPUT.PUT_LINE , raise , notice 背景 在函数、存储过程中需要进行一些debug,输出一些过程变量的值时,PG中使用raise notice可以非常方便的得到。 Oracle put_line在存储过程、...
  • 最近在学习PL/SQL 初期遇到的...dbms_output.put_line('hello world'); end; / 运行程序无结果输出: 调用DBMS输出窗口依然无结果: 程序在SQL命令行可以执行: 程序无错误,尝试更换Oracle SQL Develo...
  • DBMS_OUTPUT.PUT_LINE()方法的简单介绍

    千次阅读 2019-09-21 19:13:53
    1.最基本的DBMS_OUTPUT.PUT_LINE()方法。 随便在什么地方,只要是BEGIN和END之间,就可以使用DBMS_OUTPUT.PUT_LINE(output);然而这会有一个问题,就是使用该函数一次最多只可以显示255个字符,否则缓冲区会溢出。 ...
  • 1.网上常用的办法,使用 set serveroutput on;...3.我试了以上两种办法,都没效果,然后最后发现将DBMS_OUTPUT.PUT_LINE换成小写即可输出结果 结语:说实话sql developer不如pl/sql developer好用 ...
  • dbms_output.put_line(dbms_utility.format_error_stack); dbms_output.put_line(dbms_utility.format_call_stack); dbms_output.put_line(dbms_utility.format_error_backtrace...
  • dbms_output.put_line来输出变量的一些信息,却总是看不到结果 解决方法: 再执行存储过程之前,需要在SQL>中先执行下面这行代码: set serveroutput on; 使用 set serveroutput on 命令设置环境变量...
  • Oracle测试输出 dbms_output.put_line

    千次阅读 2019-05-29 16:46:37
    BEGIN --输出 dbms_output.put_line(v_MEMBERID||'-'||V_MEMBERNAMECN||'-'||V_BIRTHDAY||'-'||V_CERTCODE); END; BEGIN --输出 dbms_output.put_line('V_XB='||V_XB); END;
  • Oracle中调用dbms_output.put_line()不显示输出结果: 输入SQL语句:set serveroutput on;
  • 项目里存储过程中用到DBMS_OUTPUT.PUT_LINE进行输出日志,一开始不知道在哪里看,网上很多都是直接运行后的位置。但是储过程中的日志找了好一会,记录一下。 1、运行时输出位置。 declare in_interval_...
  • DECLARE  v_count NUMBER; BEGIN ... DBMS_OUTPUT.put_line('SQL%ROWCOUNT=' || SQL%ROWCOUNT);  DBMS_OUTPUT.put_line('xxxxxxxxxxxx'); END; / 在输出窗口看不到输出结果,执行SQL语句:s...
  • DBMS_OUTPUT.PUT_LINE没有输出

    千次阅读 2018-07-19 16:17:46
    解决方法:打开打印输出 set serveroutput on; 只有在调用 存储过程的时候,才会打印出来。在创建编译的时候,是不会打印出来的。 存储过程: ...如果直接运行,是打印不出的,只会打印出:PZ_S1INITCTXSETUPREQ_...
  • oracle DBMS_OUTPUT.PUT_LINE输出

    千次阅读 2018-05-01 11:33:27
    declarepSname varchar2(20);pSage varchar2(20);beginsearchS('002',pSname...dbms_output.put_line(pSname);dbms_output.put_line(pSage);end;刚开始没输出找不到原因,只要运行下 ,就OKset serveroutput on; ...
  • 写存储过程时遇到一个问题,执行dbms_output.putline(变量名)的时候,报错 ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes. 解决办法: 在begin后面加上DBMS_OUTPUT.ENABLE(buffer_size => null)...
  • dbms_output.put_line长度限制问题 对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767. 如果报错buffer overflow, 执行如下语句即可: set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED...
  • oracle PL/SQL输出语句 dbms_output.put_line

    万次阅读 2018-07-16 15:09:25
    java中可以输出,oracle中也可以,在PL/SQL中可以用 dbms_output.put_line输出。也可以拼接字符串输出。begin dbms_output.put_line(sqlStr);end;//输出语句,可以在PL/SQL查询窗口的输出中看到输出的内容。begin...
  • plsql中dbms_output.put_line使用

    千次阅读 2017-08-23 11:33:59
    今天刚学习写了存储过程,首先要注意的是;的使用,从begin开始后的每句...再就遇到明明在sql中写了dbms_output.put_line,但是在控制台上一直都没哟输出结果,百度了后来发现是要开启oracle控制台的输出服务 set server
  • 优点: 可以调用 oracle 的 put_line 方法来执行,并将结果打印在屏幕上, 无需再调用 shell 脚本. 缺点: 在存储过程正在执行的过程中, 无法实时监控到追踪的结果. ## 设置注册变量 打开兼容性开关 DB2_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,353
精华内容 23,341
关键字:

dbms_output.put_line