在下面的代码中,我试图获取AMOUNT列中值的单词金额,但似乎无法正确处理。有人有主意吗?在CREATE VIEW语句下面:
SELECT GLR3 AS RECEIPT_DOC_NO,
GLANI AS ACCOUNT_NUMBER,
GLSBL AS JDE_NO,
(SELECT YAALPH FROM PRODDTA.F060116 WHERE YAAN8 = T1.GLSBL) AS STAFF_NAME,
CASE GLDGJ WHEN 0 THEN TO_DATE (TO_CHAR (1 + 1900000), 'YYYYDDD')
ELSE TO_DATE (TO_CHAR (GLDGJ + 1900000), 'YYYYDDD') END AS GL_DATE,
GLEXA AS NARRATIVE,
GLLT AS LEDGER_TYPE,
GLSBLT AS SUBLEDGER_TYPE,
GLCRCD AS CURRENCY_CODE,
CASE GLAA WHEN 100 THEN ROUND (GLAA / 100, 2) ELSE ROUND (GLAA / 100, 2)
END AS AMOUNT,
(SELECT TO_CHAR(TO_DATE(T1.GLAA,'J'),'JSP')) FROM DUAL) AS AMOUNT_INWORDS
FROM PRODDTA.F0911 T1;
我的代码失败
ORA-00923:在预期位置找不到FROM关键字。
答案 0 :(得分:0)
ORA-00923:在预期位置找不到FROM关键字。
表示语法错误。在这种情况下,您有三个(
和四个)
:
(SELECT TO_CHAR(TO_DATE(T1.GLAA,'J'),'JSP')) FROM DUAL) AS AMOUNT_INWORDS
编译器不期望)
之后的第二个'JSP'
。
标量游标是不必要的,因此简化和更正的版本将是:
TO_CHAR(TO_DATE(T1.GLAA,'J'),'JSP') AS AMOUNT_INWORDS
ORA-01854:儒略日必须在1到5373484之间
5373484
是31-DEC-9999的儒略日期,这是Oracle中允许的最大日期。这对我们可以使用JSP
mask ...一口气拼写的数量构成了绝对限制。但是,我们可以使用PL / SQL将较大的数字分成多个块并将其拼写。不可估量的汤姆·凯特(Tom Kyte)编写了这样的函数,并将其发布在AskTom网站上。 Find it here。
我认为我尝试用字写的值具有十进制值(400.00),因此出现ORA-01854错误。
我链接到的汤姆·凯特(Tom Kyte)确实解决了页面下方的问题。 It's this comment here。
在“金额”列中检索的数据不应该以负号开头,
如果您只是想忽略负值,请应用ABS()
函数为您提供绝对值。