Příčiny chyb v sestavách po migraci na ASA 9 |
Top Previous Next |
Seznam témat:
Při testech s ASA9 se můžete obecně setkat asi s dvěmi nejčastějšími problémy se syntaxí SQL jazyka (ASA9 je obecně o něco striktnější na správnost SQL příkazů). Ty nejčastější chyby v uživatelských sestavách a SQL příkazech jsou tyto: illegal reference to correlation name příklad chybné a správné syntaxe (tedy návod na opravu) takovéhoto SQL dotazu: SELECT ... FROM t1, t2 LEFT OUTER JOIN t3 ON t1.x=t3.x Aby ho zbaštil, tak ho stačí upravit takto: SELECT ... FROM t2, t1 LEFT OUTER JOIN t3 ON t1.x=t3.x
Aggregated expression contains multiple columns of which one or more are outer references uvnitř vnořeného selectu se v agregačních funkcích nesmí objevovat položky z hlavního selectu: SELECT t1.field1, t1.field2, (select MAX(t2.fieldX-t1.fieldY) from table2 as t2) as field3 FROM table1 as t1
Řešení je asi takovéto: SELECT t1.field1, t1.field2, MAX(t2.fieldX-t1.fieldY) as field3 FROM table1 as t1, table2 as t2 GROUP BY t1.field1, t1.field2
Nebo pokud to musí být podselectem tak takto: SELECT t1.field1, t1.field2, (select MAX(t2.fieldX-t3.fieldY) from table2 as t2, table1 as t3 WHERE t2.keyX=t3.keyX) as field3 FROM table1 as t1
V přiložené sestavě "faktury EU standard" je chyba v datovém zdroji "VFpolozky", kde se vyskytuje za prvním UNIONem SELECT 1 as typ_polozky, i.obd, i.age, i.rada, i.dokl, null, null, ................. FROM DBA.udokit as i, DBA.ukonta as k, DBA.uosn as s LEFT OUTER JOIN DBA.udokhdpzal as z ON i.obd=z.obd AND i.age = z.age AND i.rada = z.rada AND i.dokl = z.dokl AND i.vsym=z.zvsym AND i.vsym2=z.zvsym2
toto je potřeba upravit relativně jednoduše a elegantně (prohozením pořadí tabulek v klauzuli FROM tak, aby spojení LEFT OUTER JOIN bylo přímo mezi spojovanými tabulkami): SELECT 1 as typ_polozky, i.obd, i.age, i.rada, i.dokl, null, null, ................. FROM DBA.ukonta as k, DBA.uosn as s, DBA.udokit as i LEFT OUTER JOIN DBA.udokhdpzal as z ON i.obd=z.obd AND i.age = z.age AND i.rada = z.rada AND i.dokl = z.dokl AND i.vsym=z.zvsym AND i.vsym2=z.zvsym2
Doufám, že jsme vyřešili jak aktuální problém, tak jsme pomohli v analýze a řešení i dalších obecných problémů spojených s přechodem na ASA9.
Související témata |