如题:
declare 
  b boolean;
begin  b := true;
  dbms_output.put_line(b);end;
声明了一个布尔变量,经过逻辑运算后,想打印其值,怎么打印?
直接dbms_output.put_line(b);打印是通不过编译的,加to_char(b)或 || '' 也不行千万别告诉我,在IF中打印
if b then
   dbms_output.put_line('b=true');
end if;

解决方案 »

  1.   


    --dbms_output.put_line();这个是不能打印boolean型的,你只能换一下
    --你说的这也是一个不错的思路啊
    if b then
      dbms_output.put_line('b=true');
    end if;--或者:
    declare  
      b boolean;
    begin
      b := true;
      dbms_output.put_line((case when b then 'true' else 'false' end));
    end;
      

  2.   


    SQL> set serveroutput on;
    SQL> 
    SQL> declare
      2         a boolean := true;
      3  begin
      4       if a then
      5          dbms_output.put_line('a is true');
      6       else
      7           dbms_output.put_line('a is false');
      8       end if;
      9  end;
     10  /
     
    a is true
     
    PL/SQL procedure successfully completed
      

  3.   

    说来说去还是按我的思路,不过这个哥们一条语句打印出了也还凑合啊,就是为了调试方便嘛顺便再问下: commit work 与 commit 的区别?
      

  4.   

    顺便再问下: commit work 与 commit 的区别?
      

  5.   


    一般都没怎么用到commit work,之前还没怎么听说,落伍了,查看了下,下面的说明不知道行不
    COMMIT WORK 语句执行许多与任务的同步执行有关的功能。
    ROLLBACK WORK语句“取消”任务同步执行的所有请求。
    COMMIT WORK 语句进行下列处理:
    • 执行所有由PERFORM ON COMMIT 请求的FORM 例程。
    按优先级的升序执行这些例程,顺序由 PERFORM 语句的LEVEL 参数指定。
    • 如果请求,触发所有更新任务功能模块。
    • 如果请求,触发所有后台任务功能模块。
    • 触发数据库提交(依次释放数据库锁定)。
    • 清空反转日志。
    反转日志包含应用更改前的表格快照。执行反转时,该快照用来将表格复位到原值。
    • 关闭所有打开的数据库光标。
    • 将所有TEMSE 对象写入永久性文件或数据库。
    TEMSE文件是由于性能原因在执行事务期间缓存的临时序列文件。TEMSE文件的示例有假脱机对象或作业日志。
    • 将时间片计数器(用于访问工作进程)复位到0。
    系统中的时间片计数器限制工作进程中程序运行的时间量。如果程序常常超过时间片限制,则可以使用COMMIT WORK为程序获得更多时间。
    但是,要达此目的,必须很容易将处理分为更小单元(全部或没有操作)。然后可以在每个单元之后插入COMMIT WORK 语句。当然处理单元逻辑上必须独立,因为在发生错误时,不能取消前面的单元中所提交的更新。
    ROLLBACK WORK“抛弃”当前事务的所有更新:
    • 抛弃所有以前用PERFORM ON COMMIT 登录的FORM例程
    • 在更新任务队列中将所有以前请求的更新任务功能标记为错误
    • 抛弃所有以前请求的后台任务功能
    • 从缓冲存储中删除所有TEMSE对象(临时 连续文件,如假脱机对象和作业日志)
    • 触发数据库反转操作(依次释放所有数据库锁定)
    • 关闭所有打开的数据库光标
    2. 以下情况需使用使用COMMIT和ROLLBACK语句。
    1) 通过INSERT、UPDATE和MODIFY语句对数据库进行更新事务后。
    2) 执行BAPI处理后。一般使用BAPI函数BAPI_TRANSACTION_COMMIT(内含COMMIT语句) 。
    3. 如果要保证数据库中当前所作的更改立即被确认,那么就必须使用COMMIT WORK 语句结束LUW。COMMIT WORK 在程序代码中标记了 LUW(几个作业联系在一起形成作业的逻辑单元) 结束并启动更新任务。在COMMIT WORK 语句以后,对数据库所作的所有更改都不能再取消。但是,如果在LUW 中出现了错误,就必须取消已经执行的部分。这意味着当前没有任何插入的行能永久地保存在数据库中。要撤销当前LUW 对数据库的更改,请使用ROLLBACK WORK,它将取消前一次数据库提交后的所有更改。
    4. COMMIT WORK [AND WAIT(同步)].
    如果使用AND WAIT选项,那么在程序继续执行以前,它要等到更新任务的结束。如果更新是成功的,SY-SUBRC 就设置为0。如果 SY-SUBRC 返回一个非零值,就没有成功的存储所作的更改。
    ROLLBACK WORK.
    如果对更改的取消是成功的,SY-SUBRC 就设置为0。如果 SY-SUBRC 返回一个非零值,就没有成功地取消所作的更改
      

  6.   

    谢了哥们,我也是在维护一个包中看到的,好像没搜索到commit work 具体用法的代码实例