我的 SQL 查询返回错误,指出列名称无效,而列存在并且它在 Oracle SQL dev IDE 中工作

问题描述 投票:0回答:1

相同的查询在 Oracle SQL Developer 中给出正确的结果,而在 Java 中,它会抛出错误。

SELECT 
    LOGIN_ID AS GROUPID, FILENAME,
    TO_CHAR (CREATEDDATE,'MM/DD/YYYY HH:MI:SS AM') AS CREATDATE,
    CASE STATUS 
        WHEN 2300 THEN 'File downloaded and deleted'
        WHEN 2200 THEN 'File Downloaded but not deleted'
        WHEN 2100 THEN 'File Created' END STATUS,UMI,PAYLOAD 
FROM 
    CC_CCS_SRD_ADM.TB_MAILBOX_OUTBOUND 
WHERE 
    LOGIN_ID = 'HCLLIN02' 
ORDER BY 
    CREATDATE DESC

java.sql.SQLException:无效的列名

在 oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3757)
在 oracle.jdbc.driver.InsensitiveScrollableResultSet.findColumn(InsensitiveScrollableResultSet.java:264)

在 SQL Developer 中可以正常获取结果,如下所示:

我尝试在查询中运行此查询,如中所述 SQL 查询错误:无效的列名,结果为 - Login_ID 标识符无效。

我修改后的查询是

SELECT * 
FROM
    (SELECT 
         LOGIN_ID AS GROUPID, FILENAME,
         TO_CHAR (CREATEDDATE, 'MM/DD/YYYY HH:MI:SS AM') AS CREATDATE,
         CASE STATUS 
             WHEN 2300 THEN 'File downloaded and deleted'
             WHEN 2200 THEN 'File Downloaded but not deleted'
             WHEN 2100 THEN 'File Created' 
         END STATUS, UMI, PAYLOAD 
     FROM 
         CC_CCS_SRD_ADM.TB_MAILBOX_OUTBOUND) DT 
WHERE 
    LOGIN_ID = 'HCLLIN02' 
ORDER BY 
    CREATDATE DESC;

好的,在此编辑中,添加我的 java 行:

query = "   SELECT LOGIN_ID as GROUPID, \n" +
                    "        FILENAME,TO_CHAR (CREATEDDATE,'MM/DD/YYYY HH:MI:SS AM') AS CREATDATE,\n" +
                    "\t\t\t\t\tDECODE (STATUS,2300,'File downloaded and deleted',2200,'File Downloaded but not deleted', 2100,'File Created' ) STATUS,UMI,PAYLOAD \n" +
                    "\t\t\t\t\tFROM CC_CCS_SRD_ADM.TB_MAILBOX_OUTBOUND\n" +
                    "\t\t\t\t\tWHERE LOGIN_ID = 'HCLLIN02' ORDER BY createddate DESC";
                    stringBuilder.append(query);
            logger.info("after Append Query ");
        }

        try
        {
            logger.info("inside try block..");
            stmt = con.prepareStatement(stringBuilder.toString());
            System.out.println(stringBuilder.toString());
            rs = stmt.executeQuery();
            while(rs.next())
            {
                //logger.info("inside select success block.."+ rs.getString(groupId));
                TreeMap<String, String> mapToAdd = new TreeMap<String, String>();
                mapToAdd.put("GroupID",rs.getString("GROUPID"));
                mapToAdd.put("FileName",rs.getString("FILENAME"));
                mapToAdd.put("umi", rs.getString("UMI"));
                mapToAdd.put("status", rs.getString("STATUS"));
                //mapToAdd.put("PAYLOAD", rs.getString("PAYLOAD"));
                mapToAdd.put("CreateDate", rs.getString("CREATEDATE"));
sql oracle join case
1个回答
0
投票

您重命名了列名称。

SELECT * 
FROM
    (SELECT 
         LOGIN_ID AS GROUPID, FILENAME,
         TO_CHAR (CREATEDDATE, 'MM/DD/YYYY HH:MI:SS AM') AS CREATDATE,
         CASE STATUS 
             WHEN 2300 THEN 'File downloaded and deleted'
             WHEN 2200 THEN 'File Downloaded but not deleted'
             WHEN 2100 THEN 'File Created' 
         END STATUS, UMI, PAYLOAD 
     FROM 
         CC_CCS_SRD_ADM.TB_MAILBOX_OUTBOUND) DT 
WHERE 
    GROUPID = 'HCLLIN02' 
ORDER BY 
    CREATDATE DESC;
© www.soinside.com 2019 - 2024. All rights reserved.