Ich habe eine Tabelle, die Daten enthält, die hierarchische Strukturen darstellt. Der einfachste Weg, Daten aus dieser Tabelle für ein einzelnes "Objekt" zu erhalten, ist eine rekursive Abfrage. Die gleiche Tabelle speichert auch "Mitgliedsvariablen", die dem "Objekt" zugeordnet sind. Ich dachte, es wäre schön, die Objektstruktur sowie assoziiertes Mitglied Variablen in einer einzigen Abfrage zu sehen, so habe ich versucht, so etwas wie:Mix rekursive Abfragen und Cursor-Ausdrücke
cursor object_explorer is
select (level*2) lvl, ob.object_id, lpad(ot1.object_type_name, 2*level + length(ot1.object_type_name), '.') ob_typ_nam
from obj_tab ob, obj_type ot1
, cursor (select lpad(mv.member_var_name, level + length(mv.member_var_name), ' ') var_nam, /*other stuff*/
from obj_type ot2, object_memberVar_value omv, member_variable mv
where mv.member_variable_id = omv.member_variable_id
and ot2.object_type_id = omv.object_type_id
and omv.object_id = ob.object_id)
where ot1.object_type_id = ob.object_type_id
and /*other filtering conditions unrelated to problem at hand*/
start with ob.objecT_id = '1234567980ABC'
connect by nocycle ob.parent_object = prior ob.object_id;
... und Oracle sagt mir „Cursor Ausdruck ist nicht zulässig“.
Wenn ich dies als zwei separate Cursor tun (durch die Ergebnisse einer Looping und dann die anderen Cursor auf Grundlage dieser Ergebnisse verwenden), alles funktioniert gut, so dass ich nicht Notwendigkeit eine Single-Cursor Lösung.
Ich wollte nur wissen, warum ich diese beiden Abfragen nicht kombinieren kann mit Cursor-Ausdrücke - oder kann ich Ich kombiniere sie und ich habe es einfach irgendwie verpasst?
(Oracle Version 10g)
Ich denke nicht, dass Sie den Cursor-Ausdruck in der Klausel from verwenden können. Ich verstehe auch nicht genau, was Sie hier versuchen. Können Sie ein Beispiel für die von Ihnen erhoffte Ausgabe geben? – Craig
@Craig: Du hast Recht. Ich musste den Cursor-Ausdruck in die SELECT-Klausel verschieben. – FrustratedWithFormsDesigner