Oracle 获取错误ORA-01722:测试函数时编号无效

Oracle 获取错误ORA-01722:测试函数时编号无效,oracle,plsql,Oracle,Plsql,我对这个问题有点困惑,我不知道这里出了什么问题。 我有这样的功能 FUNCTION GET_ARTICLES_ADDIOTION_WORK(p_ataID IN INT) RETURN SYS_REFCURSOR IS rc SYS_REFCURSOR; /*getArticlesAdditionalWork*/ BEGIN OPEN rc FOR SELECT aa.ID, aa.Name,

我对这个问题有点困惑,我不知道这里出了什么问题。 我有这样的功能

FUNCTION GET_ARTICLES_ADDIOTION_WORK(p_ataID IN INT)
  RETURN SYS_REFCURSOR IS 
  rc  SYS_REFCURSOR;
  /*getArticlesAdditionalWork*/
BEGIN
 OPEN rc FOR
       SELECT  
              aa.ID,
              aa.Name,
              aa.Quantity,
              aa.Unit,
              aa.Price,
              aa.Deduct,
              aa.Account,
              aa.Created
            FROM 
               ata_articles aa
            LEFT JOIN
               weekly_report wr
            ON
               aa.wrId = wr.id
            WHERE 
               aa.AtaId = p_ataID
            AND 
               aa.type = 1
            AND
                (aa.wrId = 0 OR (wr.status = 2 OR wr.status = 5))
            ORDER BY Name;          
RETURN rc;
END GET_ARTICLES_ADDIOTION_WORK;
不知何故,当我想测试这个函数是否正常工作时,我会遵循下面的说明

SELECT ATA_PACKAGE.GET_ARTICLES_ADDIOTION_WORK(2014) from dual
我犯了一个错误

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.
虽然我也尝试在没有函数的情况下运行查询,但也出现了相同的错误

SELECT  
  aa.ID,
  aa.Name,
  aa.Quantity,
  aa.Unit,
  aa.Price,
  aa.Deduct,
  aa.Account,
  aa.Created
FROM 
   ata_articles aa
LEFT JOIN
   weekly_report wr
ON
   aa.wrId = wr.id
WHERE 
   aa.AtaId = 2116
AND 
   aa.type = 1
AND
    (aa.wrId = 0 OR (wr.status = 2 OR wr.status = 5))
ORDER BY Name;

     
到目前为止,我签入表,ataId是数字,不是字符串。我不知道这里怎么了? 这个问题是怎么回事?我想念什么?错误从何而来

Ata_文章表定义

ACCOUNT VARCHAR2(255 CHAR)
ARTICLEPAYMENTTYPE  NUMBER(10,0)
ATAID   NUMBER(10,0)
CLIENTCOMMENT   VARCHAR2(255 CHAR)
CLIENTEMAIL VARCHAR2(255 CHAR)
CLIENTFINALSTATUS   NUMBER(10,0)
CLIENTSTATUS    NUMBER(10,0)
CREATED DATE
DEDUCT  NUMBER(10,0)
EXTERNAL    NUMBER(10,0)
ID  NUMBER(10,0)
NAME    VARCHAR2(255 CHAR)
PRICE   FLOAT
PROJECTID   NUMBER(10,0)
QUANTITY    VARCHAR2(255 CHAR)
SUPPLIERINVOICEID   NUMBER(10,0)
TABLETYPE   VARCHAR2(50 CHAR)
TOTAL   FLOAT
TYPE    VARCHAR2(4000 CHAR)
UNIT    VARCHAR2(255 CHAR)
WRID    NUMBER(10,0)
ANSWERDATE  DATE
ANSWEREMAIL VARCHAR2(50 CHAR)
ANSWERIP    VARCHAR2(50 CHAR)
ATAID   NUMBER(10,0)
COMMENT_    VARCHAR2(2000 CHAR)
CREATED DATE
DUEDATE DATE
EXTERNAL    NUMBER(10,0)
FINANCEID   NUMBER(10,0)
ID  NUMBER(10,0)
NAME    VARCHAR2(45 CHAR)
PARENT  NUMBER(10,0)
PDF_URL VARCHAR2(255 CHAR)
PROJECTID   NUMBER(10,0)
SEEN    DATE
STATUS  NUMBER(10,0)
TOKEN   VARCHAR2(50 CHAR)
WEEK    NUMBER(10,0)
YEAR    NUMBER(10,0)
周报表定义

ACCOUNT VARCHAR2(255 CHAR)
ARTICLEPAYMENTTYPE  NUMBER(10,0)
ATAID   NUMBER(10,0)
CLIENTCOMMENT   VARCHAR2(255 CHAR)
CLIENTEMAIL VARCHAR2(255 CHAR)
CLIENTFINALSTATUS   NUMBER(10,0)
CLIENTSTATUS    NUMBER(10,0)
CREATED DATE
DEDUCT  NUMBER(10,0)
EXTERNAL    NUMBER(10,0)
ID  NUMBER(10,0)
NAME    VARCHAR2(255 CHAR)
PRICE   FLOAT
PROJECTID   NUMBER(10,0)
QUANTITY    VARCHAR2(255 CHAR)
SUPPLIERINVOICEID   NUMBER(10,0)
TABLETYPE   VARCHAR2(50 CHAR)
TOTAL   FLOAT
TYPE    VARCHAR2(4000 CHAR)
UNIT    VARCHAR2(255 CHAR)
WRID    NUMBER(10,0)
ANSWERDATE  DATE
ANSWEREMAIL VARCHAR2(50 CHAR)
ANSWERIP    VARCHAR2(50 CHAR)
ATAID   NUMBER(10,0)
COMMENT_    VARCHAR2(2000 CHAR)
CREATED DATE
DUEDATE DATE
EXTERNAL    NUMBER(10,0)
FINANCEID   NUMBER(10,0)
ID  NUMBER(10,0)
NAME    VARCHAR2(45 CHAR)
PARENT  NUMBER(10,0)
PDF_URL VARCHAR2(255 CHAR)
PROJECTID   NUMBER(10,0)
SEEN    DATE
STATUS  NUMBER(10,0)
TOKEN   VARCHAR2(50 CHAR)
WEEK    NUMBER(10,0)
YEAR    NUMBER(10,0)

因此,在进行排序讨论之后,我们发现列aa.type已定义为varchar2,并且正在与一个数字进行比较。这是根本原因

检查列aa.AtaId的定义。是瓦查尔2号吗?将数字与具有非数字值的varchar2列进行比较时会出现此类问题。不,现在是。我有一张支票。然后,numberI将检查join和where子句中列出的所有列的定义。请试着在开头注释“WHERE”子句,让我们看看会发生什么。我没有看到您所附的表定义。您能为另一个表添加定义吗?我为一个表添加了表定义,我也将为第二个表添加表定义。谢谢您的建议。当然,我有一个很好的答案:)