我有一个执行 SELECT INTO 并将返回的结果存储在名为 VARCHAR2 变量中的过程account_
:
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_;
company_
、order_id_
和pay_date_
都是我用来过滤记录的 VARCHAR2 变量。
然后将输入的结果account_
格式化如下,并存储在另一个名为 的 VARCHAR2 变量中giro_
:
giro_ := LPAD( TRANSLATE( account_, '1234567890- ','1234567890' ), 16, '0' );
然后我检查是否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。
据我了解,原因是LENGTH( giro_ )
。
1..LENGTH( giro_ )
失败,因为giro_
值的 LENGTH(LENGTH 为 NULL)无法转换为 NUMBER。
我的问题是,此时在这种情况下,是giro_
空字符串还是 NULL?这里到底发生了什么?
谢谢!