2009-11-03 20 views
5

Próbuję przekonwertować niektóre zapytania Oracle SQL do pracy z (teoretycznie) dowolną bazą danych SQL. Niektóre zapytania mają charakter hierarchiczny i są napisane przy użyciu CONNECT BY.Standardowa alternatywa dla CONNECT BY?

Czy istnieje standardowa SQL alternatywna dla składni Oracle START WITH ... CONNECT BY? Czy jest jakiś zalecany proces, który powinienem wykonać, aby przekonwertować zapytania hierarchiczne?

+0

Nie ma żadnego ANSI hierarchicznego zapytania składni że” m świadomy - różni się co najmniej między SQL Server, MySQL i Postgres. –

Odpowiedz

6

W Oracle 11gR2 obsługują rekursję we wspólnych wyrażeniach tabelowych (większość użytkowników Oracle zna jako pod-zapytania faktoring, tj. Klauzulę WITH). Ponieważ jest to sposób działania ANSI, powinien być bardziej przenośny.

Tom Kyte zapisuje informacje o rekursywnym podukładzie w November 09 edition of Oracle magazine.

+0

AFAIK: SQL Server, Oracle i DB2 to jedyne bazy danych obsługujące klauzulę "WITH". Nie wiem, czy wersja DB2 obsługuje rekursję ... –

2

Jeśli potrzebujesz hierarchicznych zapytań dotyczących baz danych, które nie obsługują współczynnika podkwestionowania rekursywnego (patrz APC's answer), jedną z bardzo mało zaawansowanych technologii jest kodowanie hierarchii w oddzielny klucz. Oczywiście będzie to działać tylko wtedy, gdy będziesz mógł kontrolować proces aktualizacji tabeli i przepisać klucz po aktualizacji nadrzędnej.

Na przykład:

FLAT_HIER_ID NODE_ID PARENT_NODE_ID 
~N1   N1 
~N1~N2  N2  N1 
~N1~N2~N3  N3  N2 
~N1~N2~N4  N4  N2 

Nie bardzo elegancki, ale daje trasy dla zapytań.

Inną (prawdopodobnie lepszą) opcją jest użycie metody "Zagnieżdżony zestaw modeli". Jest to metoda stosowana w Fogbugz do obsługi zapytań w poszukiwaniu subskrypcji w MSSQL, MySQL i MS Access.

W modelu określono na

http://www.developersdex.com/gurus/articles/112.asp

Zastosowanie tej metody w FogBUGZ opisano w:

http://www.fogcreek.com/FogBugz/blog/post/Subcases-and-Hierarchy.aspx