Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Oracle

Mám aplikaci v javě, obsahující DB dotazy. Aplikace bohužel musí fungovat na různých DB (MS SQL, ACCESS, Oracle, MySQL...) a dotazy by tedy měly být napsané univerzálně tak, aby fungovaly když ne všude, tak alespoň ve výše uvedených DB. Následující dotaz mi však v Oracle nefunguje :.(:

SELECT GU2C.CPID AS CPID, 
       E.CPID AS ECPID, 
       E.EID AS EID, 
       E.TOTALSTUDYTIME AS STUDY_LENGTH, 
       E.ABSOLVED AS STATUS, 
       E.ENDLEARN AS ABSOLVATION_DATE, 
       TR.TID AS TID, 
       TR.ATTEMPT AS ATTEMPT, 
       TR.SCORE AS RESULT, 
       TR.MINSCORE AS MINSCORE, 
       TR.MAXSCORE AS MAXSCORE, 
       TR.CREATED AS DATE_WHEN_ABSOLVATED_TEST, 
       E.TIME_IN_COURSE AS TIME_IN_COURSE, 
       E.LAST_OPENED AS LAST_OPENED, 
       E.PRINTCOUNT AS PRINTCOUNT, 
       E.LASTPRINT AS LASTPRINT, 
       GU2C.VALIDFROM AS VALIDFROM, 
       GU2C.VALIDTO AS VALIDTO 
FROM (((GU2C LEFT JOIN ENROLLMENTS AS E ON 
        (E.CPID = GU2C.CPID AND E.USRID = ?)) LEFT JOIN 
       TESTRESULTS AS TR ON (E.CPID = TR.CPID AND E.USRID = TR.USRID)) LEFT JOIN 
       NOMINATION AS N ON (N.CPID = GU2C.CPID AND N.USRID = ?)) LEFT JOIN 
     TERMS AS TM ON (N.TERMID = TM.TERMID)  
WHERE (GU2C.USRID = 2) AND (GU2C.CPID IN (4, 3))

Oracle vypíše:

...FROM (((GU2C ...
            *
ERROR na řádku 17: 
ORA-00928: missing SELECT keyword 

Když mu tam to vytoužené SELECT dopíšu, tak začne řvát o kousíček dál:

...FROM (((SELECT GU2C LEFT JOIN...
                             *
ERROR na řádku 17: 
ORA-00923: FROM keyword not found where expected 

Poraďte prosím co s tím :.(

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
no na taketo zvrhe selecty ktore su naviac tazko portovatelne medzi databazami by sa dali vyuzit sto… nový
emem 03.10.2006 19:04
emem
Aha, že by jako v každé DB byla stored procedura napsaná na míru oné DB a v javě by se jen volaly ty… nový
Anicka 03.10.2006 19:57
Anicka
Nešlo by použít na práci s tabulkami nějaký ORM framework (Hibernate, OJB apod.)? Pak bude stačit zm… poslední
stepa 05.10.2006 16:18
stepa

no na taketo zvrhe selecty ktore su naviac tazko
portovatelne medzi databazami by sa dali vyuzit storovane procedury..
pripadne by bolo mozne zvazit v aplikacii pouzitie nejakeho
persistencneho frameworku, napriklad Hibernate.

Aha, že by jako v každé DB byla stored procedura napsaná na míru oné DB a v javě by se jen volaly ty procedury? Ale jsme zas u problému, že se mi nechce vymýšlet jak jednu věc napsat x různými způsoby pro x DB... :-(

Snažím se přijít na to jaký smysl vlastně mají poslední 2 řádky v klauzuli FROM:

... LEFT JOIN NOMINATION AS N ON (N.CPID = GU2C.CPID AND N.USRID = ?)) 
    LEFT JOIN TERMS AS TM ON (N.TERMID = TM.TERMID)

když se žádné sloupce z NOMINATION ani TERMS neselektují (dotaz není moje dílo, já ho mám "jen" rozchodit i v Oraclu). Běz těch posledních dvou řádků bych to dokázala přepsat do plusové notace Oraclu, ale s nimi ne a musela bych vymýšlet úplně jiné dotazy :-(

Nešlo by použít na práci s tabulkami nějaký ORM framework (Hibernate, OJB apod.)? Pak bude stačit změnit driver pro databázi. Jinak optimalizovat dotazy pro "všechny" databáze je blbost, většinou zákazník používá nějakou konkrétní platformu které to přizpůsobíš. Výjimkou může být nějaký "balíkový" soft, ale tam by nemělo být problém vytvořit lokalizace pro danou databázi... má Oracle, dobře dostane lokalizaci A, má PostgreSQL, pak dostane lokalizaci B.

V každém případě bych ale zvážil ORM, logika bude v aplikační vrstvě a je jedno jakou zákazník používá databázi, protože se změní jen driver.

Zpět do poradny Odpovědět na původní otázku Nahoru