【问题标题】:How to convert Boolean to Number in PL/SQL?如何在 PL/SQL 中将布尔值转换为数字?
【发布时间】:2018-12-20 10:53:41
【问题描述】:

我有一个布尔值,我正在尝试将其转换为 PL/SQL 中的数字。

PROCEDURE Test(
   contract_ IN VARCHAR2,
   mch_code_ IN BOOLEAN)   
IS
  val_ NUMBER;
BEGIN
  val_ := mch_code_.to_number();
...some code
END Test;

这不起作用。

如何在 PL/SQL 中将布尔值转换为数字?

【问题讨论】:

标签: oracle plsql


【解决方案1】:

你需要一个case

create PROCEDURE Test(
   contract_ IN VARCHAR2,
   mch_code_ IN BOOLEAN)   
IS
 val_ NUMBER;
BEGIN
  val_ := case when mch_code_ then 1 else 0 end;
...some code
END Test;

【讨论】:

  • 实际上case 应该保留NULL 而不是假设NULL 为FALSE:case when mch_code_ then 1 when NOT mch_code_ then 0 end
  • 嗨,我在选择中尝试了此代码。但不能工作:)。为什么plsql不支持bool?
  • @Oğuz:PL/SQL 支持布尔值,但 Oracle 的 SQL 不支持
【解决方案2】:

如何在plsql中将布尔值转换为数字?

您需要使用sys.diutil.bool_to_int 将布尔值转换为数字。请看下面的演示。

DECLARE

  var BOOLEAN :=TRUE;
  var1 varchar2(10);
BEGIN 
  --Converting boolean to int here and checking.
  var1:=CASE WHEN (sys.diutil.bool_to_int(var)) = 1 THEN 'TRUE'
             WHEN (sys.diutil.bool_to_int(var)) = 0 THEN  'FALSE'
             END;  
    dbms_output.put_line(var1);
END;

输出:

anonymous block completed

在你的情况下,它变成:

PROCEDURE Test(
        contract_ IN VARCHAR2,
        mch_code_ IN BOOLEAN)
IS
    val_ NUMBER;
BEGIN
    val_ := sys.diutil.bool_to_int(mch_code_);
    ...SOME code
END Test;

【讨论】:

  • 我们真的需要使用这个功能吗?案例将是更好的选择,对吗?
  • @Gaj 已经被马共享了。我不能发布重复的答案。 :-)
  • @Gaj 这个函数对我来说更好,因为我想将多个布尔值传递给游标。我只是直接从函数中传入 1 或 0,这使我的代码更清晰。
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 2019-04-12
  • 2012-01-13
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多