Es gibt solche Anrufe
%Vor%Ich frage mich, ob es eine Möglichkeit gibt, dass zwei sysdate Aufrufe unterschiedliche Werte geben? Ändert sich sysdate nicht nur aufgrund der Ausführungsgeschwindigkeit?
some_proc(sysdate, sysdate);
- sysdate ist NICHT immer dasselbe, wenn es in einer PL / SQL-Anweisung verwendet wird
select some_func(sysdate, sysdate) from dual;
- sysdate ist immer dasselbe, wenn es in einer SQL-Anweisung verwendet wird (selbst wenn diese SQL-Anweisung PL / SQL aufruft)
Aus dem Abschnitt Konsistenz auf Anweisungsebene Das Konzeptleitfaden: "Oracle erzwingt immer die Lesekonsistenz auf Anweisungsebene. Dies garantiert, dass alle Daten, die von einer einzelnen Abfrage zurückgegeben werden, von einem einzigen Zeitpunkt stammen - dem Zeitpunkt, zu dem die Abfrage gestartet wurde."
Diese Seite impliziert, dass das Gleiche für eine reine PL / SQL-Funktion nicht gilt.
Wir können dies demonstrieren, indem wir eine große Funktion (SQL-Kontext) und eine Prozedur (PL / SQL-Kontext) erstellen, die viele Zeitstempelparameter akzeptieren, und dann die Eingabeparameter für irgendwelche Unterschiede vergleichen. Ich habe Zeitstempel anstelle von Daten verwendet, weil sie im Hinblick auf die Konsistenz auf die gleiche Weise funktionieren sollten, aber der Zeitstempel (9) ändert sich milliardenfach häufiger als ein Datum. (Grob - es gibt wahrscheinlich viele Rundungen und interne Uhr Details, die mir nicht bekannt sind, machen das komplizierter.)
%Vor%