【发布时间】:2016-10-10 10:54:21
【问题描述】:
我在创建以下程序时遇到错误,我还从程序中删除了大部分部分,并且只包含了我遇到问题的部分。问题出在解码子句中,请帮忙!!!
[警告] ORA-24344:编译错误 84/41 PL/SQL 成功: ORA-00907: 缺少右括号 33/4 PL/SQL: SQL 语句 忽略(2:0):警告:已编译但存在编译错误
CREATE OR REPLACE PROCEDURE ERR_OUT (
in_Srcsyscd IN VARCHAR2)
IS
rcrdnums VARCHAR2 (32767);
rcrd_cnt INT;
BEGIN
rcrd_cnt := 500;
SELECT RTRIM (
XMLCAST (
XMLAGG (XMLELEMENT (e, RCRDNUM) ORDER BY RCRDNUM) AS CLOB),
',')
INTO rcrdnums
FROM (SELECT (ERR.RCRDNUM || ',') AS RCRDNUM
FROM tableName ERR
WHERE ROWNUM <= rcrd_cnt
AND ( in_srcsyscd IS NULL
OR (decode (REGEXP_COUNT (in_srcsyscd, ','),0,(ERR.Srcsyscd = in_srcsyscd),
(ERR.Srcsyscd IN
(SELECT DISTINCT srcsyscd
FROM tableName
WHERE srcsyscd IN
(SELECT err.srcsyscd
FROM tableName ERR
RIGHT OUTER JOIN
( SELECT UPPER (
REGEXP_SUBSTR (
in_Srcsyscd,
'[^,]+',
1,
LEVEL))
CNTRY_CD
FROM DUAL
CONNECT BY REGEXP_SUBSTR (in_Srcsyscd,
'[^,]+',
1,
LEVEL)
IS NOT NULL) CNTRY_P
ON (UPPER (
ERR.srcsyscd) !=
CNTRY_P.CNTRY_CD))
OR srcsyscd IS NULL)))))
下面是我遇到问题的 where 子句,我可以观察到的括号计数没有问题,但 oracle 仍然为此抛出错误:
AND ( in_srcsyscd IS NULL
OR (decode (REGEXP_COUNT (in_srcsyscd, ','),0,(ERR.Srcsyscd = in_srcsyscd),
(ERR.Srcsyscd IN
(SELECT DISTINCT srcsyscd
FROM AMT_OWNER.AMT_EVNT_SPND_ERR_STG
WHERE srcsyscd IN
(SELECT err.srcsyscd
FROM TableName
RIGHT OUTER JOIN
( SELECT UPPER (
REGEXP_SUBSTR (
'CONCUR',
'[^,]+',
1,
LEVEL))
CNTRY_CD
FROM DUAL
CONNECT BY REGEXP_SUBSTR (
'CONCUR',
'[^,]+',
1,
LEVEL)
IS NOT NULL) CNTRY_P
ON (UPPER (
ERR.srcsyscd) !=
CNTRY_P.CNTRY_CD))
OR srcsyscd IS NULL)))))
【问题讨论】:
-
'缺少右括号'给你所有。如果您使用 notepad++ 或一些括号帮助,您会发现您错过了最后一个括号 ..."OR srcsyscd IS NULL))))))"
-
这似乎不是括号问题。