Unterschied zwischen "IN" und "OUT" CURSOR-parameter in Oracle
Vom Oracle:
"Wenn Sie deklarieren Sie eine cursor-variable als formale parameter an ein Unterprogramm, das holt aus dem cursor-variable, müssen Sie die IN-oder IM AUS-Modus. Wenn das Unterprogramm öffnet auch die cursor-variable, müssen Sie die IN-OUT-Modus."
Aber, ich kann code, ist (nur OUT-parameter):
create or replace procedure mycur_out(mc OUT mycurpkg.mytypecur) as
begin
open mc for select * from mytable;
end mycur_out;
und funktioniert gleich (IN OUT-parameter)
create or replace procedure mycur_inout(mc IN OUT mycurpkg.mytypecur)
as
begin
open mc for select * from table10;
end mycur_inout;
Auch, Es funktioniert mit dynamischen cursor zu:
create or replace procedure mycur_out_ref(mc out mycurpkg.mytyperefcur)
as
begin
open mc for 'select * from table10';
end mycur_out_ref;
Getestet hab ich die 3 Fälle direkt von oracle und aus VB6 mit ADO, und keine Probleme.
So, in diesen Fällen, gibt es einen Unterschied zwischen BEI Verwendung nur "OUT" und "IN-OUT" - Cursor-Parameter?
UPDATE
Der Grund warum ich Frage:
- Wir Lesen von Daten mit Routinen ähnlich
die Beispiele (öffnen Sie einfach den
Cursor). Die cursor-Parametern
immer sind "IN-OUT" (fragt mich nicht
warum, versuche ich herauszufinden) - Die Routinen werden aufgerufen mit ADO/VB6
- Nun, wir werden versuchen, einige der Routinen von JDBC, aber die
adapter anscheinend nur akzeptiert AUS
Parameter in diesen Fällen. - Schließlich der Hauptgrund, ich will zu ändern, die cursor-Parameter in DB
- Routinen nur HERAUS, aber zuerst muss ich
wollen Sie wissen, die Kollateralen Effekte
von dieser änderung zu.
Dank!
Blick auf den code, ist nicht die Frage 'gibt es einen Unterschied zwischen OUT-und IN OUT-cursorparameter?'. Es gibt kein Beispiel mit einem IN-parameter.
Guter Punkt, JulesLt. Ich bin update-Frage. Danke!
Guter Punkt, JulesLt. Ich bin update-Frage. Danke!
InformationsquelleAutor Frajmen | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den text, den Sie zitieren aus dem Handbuch, beachten Sie, dass es ist ausdrücklich die Rede von den "ein Unterprogramm holt aus dem cursor-variable". Keines der Beispiele, die dies tun, so der Kostenvoranschlag ist für Sie nicht relevant.
Jedoch trotzdem angezeigt wird, dass es nichts falsch mit der Verwendung
OUT
nur in einer solchen situation, wenn das Unterprogramm beide öffnet und holt aus dem cursor-variable:Ich denke, der text ist tatsächlich versucht zu machen, zwei Punkte, die etwas unabhängig von einander. Erstens, wenn Sie übergeben möchten, der bereits geöffneten cursor-variable in einem Unterprogramm, die holt aus, der parameter muss deklariert werden
IN
oderIN OUT
. Zweitens, wenn Sie wollen, eine cursor-variable in einem Unterprogramm, das wird öffnen Sie es dann, die parameter deklariert werden müssenOUT
oderIN OUT
. Dies gilt unabhängig davon, ob Sie tatsächlich kümmern, übergeben Sie den Wert der cursor-variable an den Aufrufer zurück:Dieser Fehler kann behoben werden, indem Sie den parameter-Modus, aber eigentlich würde es scheinen, mehr Sinn machen, einfach nur die cursor-variable eine lokale variable, sondern als einen parameter.
InformationsquelleAutor Dave Costa
Wenn ich die Frage verstehen Recht, der Unterschied ist, dass mit dem IN-OUT-version, die Sie weitergeben können, in einen cursor von außerhalb der Prozedur, und ändern Sie dann diese variable (ähnlich wie der Unterschied zwischen OUT und IN-OUT für eine einfache numerische variable).
Den OUT-parameter cursor beginnt mit einem NULL-Wert /geschlossen cursor.
Den IN-OUT-parameter-version beginnt mit dem, was Staat übergeben wird, von außen.
Können Sie möchten, wiederholen Sie die Prozedur ruft immer wieder passieren in der gleichen cursor-Variablen - version der Fall, ersetzen Sie den vorhandenen Wert, der IN der version geben sollte, eine Ausnahme, auf die zweite, die Sie versuchen zu öffnen cursor.
Andere Sache, die IN OUT-Ansatz ermöglicht es, dass die Herangehensweise nicht, um Maßnahmen zu ergreifen, basierend auf dem übergebenen cursor und ändern Sie den cursor zurückgegeben.
Bin ich nur zu kämpfen, zu denken, eine Reale situation, wo Sie vielleicht wollen (nehmen Sie eine cursor-variable, warf es wieder in eine SQL-Anweisung, fügen Sie einige extra-dynamische SQL-und zurück, das ganze zurück, als die gleichen cursor??).
InformationsquelleAutor JulesLt