Oracle SQL - 使用LPAD和RPAD缺少右括号

时间:2018-05-29 21:02:01

标签: sql oracle

这是较长查询的标题行报告。

alias docker='docker --tlsverify=false'

直到我到达以下行:

SELECT
RPAD ('C', 1)
|| RPAD (' ', 24)
|| RPAD ('HED', 3)
|| RPAD (' ', 1)
|| RPAD ('BSC', 3)
|| RPAD (' ', 1)
|| RPAD ((LPAD (c.total_acct), 6, 0), 6)
|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 1, 4), 4)
|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 5, 2), 2)
|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 7, 2), 2)
|| RPAD (' ', 7)
|| RPAD ((LPAD (c.total_amt), 14, '0'), 14)
|| RPAD (' ', 34)
AS HEADER_ROW

2 个答案:

答案 0 :(得分:4)

如果您查看导致此问题的其中一行:

RPAD ((LPAD (c.total_acct), 6, 0), 6)

您应该看到对LPAD()的调用没有足够的参数。也许你的意思是这个?

RPAD( LPAD( c.total_acct, 6, 0 ), 6 )

导致问题的另一条线的情况也是如此。错误信息有点令人困惑 - 问题实际上是括号过多。

希望这有帮助。

答案 1 :(得分:1)

是的,@ David的答案好像可以解决问题。

此外,SYSDATE标题看起来有点奇怪。首先,日期转换为YYYYMMDD,然后显示前四个字符(年份)。然后再次转换日期,并显示字符5和6(月份),日期相同。

我相信你可以替换

|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 1, 4), 4)
|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 5, 2), 2)
|| RPAD (SUBSTR (TO_CHAR (SYSDATE, 'YYYYMMDD'), 7, 2), 2)

安全地通过

|| TO_CHAR (SYSDATE, 'YYYYMMDD')