首页 > 解决方案 > SQL 语句中缺少左括号的解决方法

问题描述

SQL Developer 说缺少左括号。

ORA-00906:缺少左括号 00906。00000 -“缺少左括号” *原因:
*操作:第 8 行错误:第 8 列:108

甲骨文 SQL

SELECT  t.DSA_NAME as "DSA NAME",
    t.REVISION as REVISION,
    XMLTYPE(t.DSA_SOURCE).EXTRACT('//PreProcessor/statements/text()').getStringVal() AS "PreProcessor Temp Table", 
    XMLTYPE(t.DSA_SOURCE).EXTRACT('//PostProcessor/statements/text()').getStringVal() AS "PostProcessor Temp Table"
    FROM 
    DSA_SOURCE t
    where XMLCAST (XMLTYPE(t.DSA_SOURCE).EXTRACT('//PreProcessor/statements/text()').getStringVal() AS VARCHAR2) like '%create%temp%'
    and t.REVISION IN (SELECT MAX(REVISION)
                     FROM DSA_SOURCE
                     GROUP BY DSA_NAME);

我曾尝试在 CAST 函数中使用VARCHAR2(100)而不是使用,但随后出现错误VARCHAR

ORA-00932:不一致的数据类型:预期 - 得到 - 00932. 00000 - “不一致的数据类型:预期 %s 得到 %s” *原因:*操作:

标签: sqloracle

解决方案


这个 Stackoverflow 答案很好地总结了它 https://stackoverflow.com/a/10197710/9822083

SELECT  t.DSA_NAME as "DSA NAME",
t.REVISION as REVISION,
XMLTYPE(t.DSA_SOURCE).EXTRACT('//PreProcessor/statements/text()').getStringVal() AS "PreProcessor Temp Table", 
XMLTYPE(t.DSA_SOURCE).EXTRACT('//PostProcessor/statements/text()').getStringVal() AS "PostProcessor Temp Table"
FROM 
DSA_SOURCE t
where XMLCAST (XMLTYPE(t.DSA_SOURCE).EXTRACT('//PreProcessor/statements/text()').getStringVal() AS VARCHAR2(50)) like '%create%temp%'
and t.REVISION IN (SELECT MAX(REVISION)
                 FROM DSA_SOURCE
             GROUP BY DSA_NAME);

VARCHAR2 是一种需要最大大小/长度的类型。您缺少的左括号是围绕大小的括号。


推荐阅读