如何使用Oracle SQL将货币金额检索为单词

时间:2019-04-18 07:07:19

标签: oracle plsql

在下面的代码中,我试图获取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关键字。

1 个答案:

答案 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()函数为您提供绝对值。