繁体   English   中英

如何在pl-sql中显示变量的数据类型

[英]How to display the datatype of a variable in pl-sql

我有一个字段“ DIVISIONS”,其中用竖线(|)分隔了NUMBER。 我使用DECLARE部分中的以下游标分割管道分隔值,如下所示。 我将它与一个表结合在一起,因为我需要根据我分割的每个值从表中获取一些其他字段并添加这些值。 表中的字段为NUMBER(38)。

FUNCTION foo (divisions IN VARCHAR2)
RETURN NUMBER
IS
      CURSOR splitDiv
      IS
        SELECT ud.* FROM (
          SELECT REGEXP_SUBSTR(divisions, '[^|]+', 1, ROWNUM) AS division
          FROM DUAL
          CONNECT BY LEVEL <= LENGTH (REGEXP_REPLACE(divisions, '[^|]+'))  + 1
          ) d
        JOIN ud
        ON NVL(TO_NUMBER(d.division),0) = NVL(TO_NUMBER(ud.udValue),0);

  divStatusVar NUMBER(38) := 0;

BEGIN

  FOR d IN splitDiv
  LOOP
    divStatusVar := divStatusVar + TO_NUMBER(d.status);
  END LOOP;

  RETURN divStatusVar ;

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Code : ' || SQLCODE || ' Error : ' || SQLERRM);
    RETURN divStatusVar ;
END foo;

这就是我所谓的函​​数:

DECLARE
...
status NUMBER(38) := 0;
...
BEGIN
...
status := foo('1234|6789');
...
END;

当我执行上面的代码时,出现以下错误:

ORA-01722: invalid number ORA-01403: no data found

对于为什么会引发此错误,我一无所知。 我想查看“ d.status”的数据类型。 我可以访问数据库和表UD,并且此字段的数据类型为NUMBER(38),但是在获取Cursor中的行后,我不确定它是否仍然相同。

有什么办法可以打印此字段/变量的数据类型? 还是我在这里想念的其他东西? 任何指针都会有很大帮助。

感谢大家的投入! 这是发生了什么事-

如对问题的评论之一所述,我正在将csv格式输入文件加载到登台表中。 然后将登台表中的列之一作为参数传递给函数FOO。 在加载数据时,我使用了SQL Loader的以下属性。

OPTIONALLY ENCLOSED BY '"'

但是在示例文件中,我使用的值只是用逗号分隔,没有双引号(“”)。 我更改了文件,以使文件中的每个值都由疑问引号引起来,将该文件加载到登台表中,然后执行上述过程,它工作得很好。 因此,问题不在于代码,而在于文件。

感谢大家花时间解决我的问题并提供意见!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM