2017-03-15 47 views
1

このエラーに関するいくつかの質問がありましたが、それぞれの解決策はいわゆる "構文エラー"です。私は生産現場でOracleを使用しており、開発中はDerbyを使用しています(非常に面倒ですが、何ができますか)。Derbyのsqlエラー - エラー42X01:構文エラー: "WHERE"が発生しました

私がOracle上で作成した特定のSQLコマンドを実行すると、正常に動作していると思われます(Oracle SQL Developerを使用しています)。しかし、Derbyで同じコマンドを実行したいとき、私はこのエラーに遭遇します。

私はこのようなエラーに遭遇します。

WARN | SQL Error: 20000, SQLState: 42X01

ERROR | Syntax error: Encountered "WHERE" at line 94, column 6.

私の人生にとって、何が間違っているのか分かりません。ここに私のSQLコマンドです。少し長く複雑です:

CREATE VIEW BDPBCDBView AS SELECT 
     BDP_INSTITUTION_NAME, 
     BIC, 
     BDP_COUNTRY_NAME,    
     BDP_ISO_COUNTRY_CODE,    
     BDP_CITY,      
     BDP_NETWORK_CONNECTIVITY,  
     BDP_SERVICE_CODES,    
     BDP_ISTARGET,       
     BCDB_NAME,      
     BCDB_LAENDERKENNZEICHEN, 
     BCDB_AKTIVMERKMALBANK,   
     BCDB_AKTIVMERKMALLAND,  
     BCDB_AKTIVMERKMALBANKLAND, 
     BCDB_SWIFTKENNZEICHEN,  
     COUNTRYCODE,  
     ISBDP,  
     ISBCDB,  
     BCDB_ORT, 
     s1.BICS_RMA 
     FROM 
(SELECT 
     bdp.bic, 
     bdp.institution_name AS bdp_institution_name, 
     bdp.country_name AS bdp_country_name, 
     bdp.iso_country_code AS bdp_iso_country_code, 
     bdp.city AS bdp_city, 
     bdp.network_connectivity AS bdp_network_connectivity, 
     bdp.service_codes as bdp_service_codes, 
     bdp.isTarget AS bdp_isTarget, 
     bcdb.name as bcdb_name, 
     bcdb.laenderKennzeichen as bcdb_laenderKennzeichen, 
     bcdb.aktivMerkmalBank AS bcdb_aktivMerkmalBank, 
     bcdb.aktivMerkmalLand AS bcdb_aktivMerkmalLand, 
     bcdb.aktivMerkmalBankLand AS bcdb_aktivMerkmalBankLand, 
     bcdb.swiftKennzeichen AS bcdb_swiftKennzeichen, 
     CASE 
      WHEN bcdb.laenderKennzeichen IS NOT NULL THEN bcdb.laenderKennzeichen 
      ELSE bdp.iso_country_code 
     END AS countryCode, 
     CASE 
      WHEN bdp.bic IS NOT NULL THEN 1 
      ELSE 0 
     END AS isbdp, 
     CASE 
      WHEN bcdb.bic IS NOT NULL THEN 1 
      ELSE 0 
     END AS isbcdb, 
     bcdb.ort AS bcdb_ort 
     FROM BDP bdp LEFT JOIN BCDB bcdb ON bdp.bic = bcdb.bic WHERE bdp.bic IS NOT NULL 
    UNION ALL SELECT 
     bcdb.bic, 
     bdp.institution_name AS bdp_institution_name, 
     bdp.country_name AS bdp_country_name, 
     bdp.iso_country_code AS bdp_iso_country_code, 
     bdp.city AS bdp_city, 
     bdp.network_connectivity AS bdp_network_connectivity, 
     bdp.service_codes as bdp_service_codes, 
     bdp.isTarget AS bdp_isTarget, 
     bcdb.name as bcdb_name, 
     bcdb.laenderKennzeichen as bcdb_laenderKennzeichen, 
     bcdb.aktivMerkmalBank AS bcdb_aktivMerkmalBank, 
     bcdb.aktivMerkmalLand AS bcdb_aktivMerkmalLand, 
     bcdb.aktivMerkmalBankLand AS bcdb_aktivMerkmalBankLand, 
     bcdb.swiftKennzeichen AS bcdb_swiftKennzeichen, 
     CASE 
      WHEN bcdb.laenderKennzeichen IS NOT NULL THEN bcdb.laenderKennzeichen 
      ELSE bdp.iso_country_code 
     END AS countryCode, 
     CASE 
      WHEN bdp.bic IS NOT NULL THEN 1 
      ELSE 0 
     END AS isbdp, 
     CASE 
      WHEN bcdb.bic IS NOT NULL THEN 1 
      ELSE 0 
     END AS isbcdb, 
     bcdb.ort AS bcdb_ort 
    FROM BDP bdp RIGHT JOIN BCDB bcdb ON bdp.bic = bcdb.bic WHERE bdp.bic IS NULL) 
    t1 LEFT JOIN (SELECT * FROM 
    (
     SELECT s1.BIC_CRSPNDT AS BICS_RMA FROM  
    (SELECT 
    rma.crspdt AS BIC_CRSPNDT, 
    rma.issr AS BIC_ISSR  
    From RMA  
    WHERE ((RMA.tp= 'Issued' OR RMA.tp = 'Received') AND RMA.RMASTS='Enabled' AND RMA.SVCNM='swift.fin'))s1 
    UNION 
    SELECT s1.BIC_ISSR AS BIC FROM (SELECT 
    rma.crspdt AS BIC_CRSPNDT, 
    rma.issr AS BIC_ISSR  
    FROM RMA 
    WHERE ((RMA.tp= 'Issued' OR RMA.tp = 'Received') AND RMA.RMASTS='Enabled' AND RMA.SVCNM='swift.fin'))s1) 
    WHERE BICS_RMA IS NOT NULL  
    ORDER BY BICS_RMA) s1 
    ON (s1.BICS_RMA = substr(t1.BIC, 1,8)) 

エラーは3行目から最後の行で発生します。

のJavaのコードで私の読み取りは、次のとおりです。

@PersistenceContext 
EntityManager em; 

@PostConstruct 
public void createViewIfNeeded() { 

    if (FidaProfile.isActive(FidaProfile.DEVELOPMENT)) { 

     em.createNativeQuery("DROP TABLE BDPBCDBView").executeUpdate(); 

     String command_1 = loadDevelopmentViewScript("DEV-DB/init_dev_view.sql");//BDPBCDView sql script, this is made from 3 tables namely BCDB, BDP and RMA 

     em.createNativeQuery(command_1).executeUpdate(); 

    } 
} 

public void setEm(EntityManager em) { 
    this.em = em; 
} 

private String loadDevelopmentViewScript(String addressOfSQLScript) { 
    try { 
     InputStream stream = BDPBCDPViewGenerator.class.getClassLoader().getResourceAsStream(addressOfSQLScript); 

     ByteArrayOutputStream result = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = stream.read(buffer)) != -1) { 
      result.write(buffer, 0, length); 
     } 
     return result.toString("UTF-8"); 
    } catch (IOException e) { 
     throw new FidaErrorCodeException(FidaErrorCode.UNEXPECTED_EXCEPTION, 
       "Could NOT load Development-View-Script", e); 
    } 
} 
+0

質問に間違いはありません。これは本当に**ダービー**の質問ではなく、Oracleの質問であるようです。 – mathguy

+0

@mathguyどこから始めたらいいですか?問題をどのように解決すればよいですか?あなたは私に何か指摘してもらえますか? – ITguy

+0

@mathguyはクエリ全体を尊重していますが、かなり長いです。 – ITguy

答えて

2

さておき、良いフォーマットとして、複雑なクエリで何が起こっているのかを追跡するために不可欠です!

前回の回答が間違っていたので、s1サブクエリを変更してユニオンを使用するのではなくアンピボットするようにしたらどうでしょうか?何かのように:あなたがそれを行うにはなかったかもしれない場合

SELECT DISTINCT CASE WHEN dummy.id = 1 THEN r.bic_crspndt 
        WHEN dummy.id = 2 THEN r.bic_issr 
       END AS bics_rma 
FROM (SELECT rma.crspdt AS bic_crspndt, 
       rma.issr AS bic_issr 
     FROM rma 
     WHERE (rma.tp = 'Issued' OR rma.tp = 'Received') 
     AND rma.rmasts = 'Enabled' 
     AND rma.svcnm = 'swift.fin') r 
     INNER JOIN (SELECT 1 ID FROM dual UNION ALL 
        SELECT 2 ID FROM dual) dummy ON (dummy.id = 1 AND r.crspdt IS NOT NULL) 
                OR (dummy.id = 2 AND r.issr IS NOT NULL); 

、Derbyデータベースは、それに対処することができるだろうか?

N.B.私はDerbyとUNPIVOTについては何も知らないので、Oracle 11gのUNPIVOT関数ではなく条件付きのクロス結合を使用してマニュアルUNPIVOTを使用しました。あなたが実際の環境と開発環境の間で別々のデータベースプラットフォームを使用することを余儀なくされているのはまさに私を超えています。嫌な思いを抱き、潜在的には危険です!私はあなたがすでにそのことを知らせることを試みたと思います!

+0

コード全体を共有してください。あなたが言ったことを試したので私はそれを言う。ダービーでもうまくいかないだけでなく、Oracleにもエラーを投げ始める。 – ITguy

+0

私はPS PADを使用していますが、ブラケットが見つからないようです。 – ITguy

+0

ええ、謝罪します。私の答えは正しくなかったようです。大括弧* {: - /私はまだ良いフォーマットを使用して立っている私のIDEが再生されている必要があります! – Boneist

関連する問題