查询执行时出现oracle错误:

时间:2016-10-10 12:37:44

标签: oracle oracle11g

select * from  Tablename where 1=1 and 
      decode (
             REGEXP_COUNT ('TEST1,TEST2', ','),
                          0,
                          TableName.Srcsyscd = 'CONCUR',
                          TableName.Srcsyscd='SAP'
             )
  

执行命令时出错:[错误]执行(38:64):ORA-00907:缺少右括号

请使用仅解码

帮助提供解决方案

2 个答案:

答案 0 :(得分:1)

我猜你想要

SELECT *
FROM   tablename
WHERE  1 = 1
       AND tablename.srcsyscd =
       decode(regexp_count('TEST1,TEST2', ','), 0, 'CONCUR', 'SAP')

答案 1 :(得分:1)

DECODE放入WHERE子句时,可以使用它来删除与某些值不匹配的行。如果这是你的意图,你应该将它与某些东西进行比较。例如:

select * from  Tablename where 1=1 and 
      TableName.Srcsyscd = decode (
                             REGEXP_COUNT ('TEST1,TEST2', ','),
                                         0,
                                         'CONCUR',
                                         'SAP'
                            )

如果要显示它,请将其放在SELECT子句中,如下所示:

select Tablename.*,
         decode (
                 REGEXP_COUNT ('TEST1,TEST2', ','),
                             0,
                             'CONCUR',
                             'SAP'
                )

  from Tablename

在这两种情况下,如果用列名替换“TEST1,TEST2”会更有意义。