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”子句,让我们看看会发生什么。我没有看到您所附的表定义。您能为另一个表添加定义吗?我为一个表添加了表定义,我也将为第二个表添加表定义。谢谢您的建议。当然,我有一个很好的答案:)