当前位置: 首页 > 知识库问答 >
问题:

存储在VARCHAR2变量中的查询结果是否被视为空字符串或null?-Oracle PL/SQL-Oracle 11g

曹德明
2023-03-14

我有一个过程,它执行SELECT INTO并将返回的结果存储在名为account_的VARCHAR2变量中:

SELECT DISTINCT NVL(XYZ_API.Get_Ref(company, currency, pay_type, order_id), 
                    XYZ_API.Get_Id(company, currency, pay_type, order_id)) account
INTO account_
FROM some_table
WHERE company                     = company_
     AND payment_type             = 'SUPP'
     AND order_id                 = order_id_
     AND payment_date             = pay_date_;

然后检查giro_是否是一个数字,下面是一个FOR循环。

FOR i_ IN 1..LENGTH( giro_ ) LOOP
     c_ := ASCII( SUBSTR( giro_ , i_, 1 ) );
     IF ( c_ < ASCII( '0' ) OR c_ > ASCII( '9' ) ) THEN
        RETURN FALSE;
     END IF;
  END LOOP;

我有一个场景,上面显示的SELECT查询不提取任何记录。

这最终会在FOR循环中引入异常,错误为ORA-06502和ORA-06512。

共有1个答案

谷梁玺
2023-03-14

你的理解是错误的。length将始终返回一个数字(字符串长度),它不检查其参数是否为数字。

该规则的一个例外是,如果它的(length)参数是空字符串(在Oracle中,它等于null)-那么长度也是未知的(null):

SQL> select length(''), length(null) from dual;

LENGTH('') LENGTH(NULL)
---------- ------------


SQL>

在这种情况下,修改代码,使其包含NVL函数,例如。

FOR i_ IN 1 .. NVL(LENGTH( giro_ ), 0) LOOP

对于空字符串,它不会做任何事情。

 类似资料:
  • 本文向大家介绍检查Java中的字符串是否为空(“”)或null,包括了检查Java中的字符串是否为空(“”)或null的使用技巧和注意事项,需要的朋友参考一下 要检查Java中的字符串是否为空或为空,请使用==运算符。 假设我们有以下字符串。 现在让我们检查两个字符串是否为null或为空。结果将为布尔值。 示例 输出结果

  • 在下面的代码中,我需要检查版本字符串是否为空,然后将其值附加到请求变量。 如何检查不在if条件下?

  • 问题内容: 我想知道上面的代码是否可用于检查变量是否为null或为空。 问题答案: 是的,该代码正是这样做的。 您还可以使用: 编辑: 使用添加的值信息,您需要: 一个值不能包含值。

  • 问题内容: 如何确定变量是字符串还是JavaScript中的其他内容? 问题答案: 您可以使用运算符: 在使用创建的字符串的情况下,这将无法正常工作,但很少使用,建议在[1][2]中使用。如果需要,请参阅其他答案以了解如何处理这些问题。

  • 在PowerShell中,是否有一个内置的类函数来检查字符串是空还是空? 到目前为止我还找不到它,如果有一个内置的方式,我不想为此写一个函数。