sysdate Unterschied

8

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?

    
michael nesterenko 31.10.2011, 13:39
quelle

2 Antworten

11

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%     
Jon Heller 01.11.2011, 06:40
quelle
0

Oracle verwendet das aktuelle Systemdatum und die aktuelle Systemzeit für alle SYSDATE-Instanzen, wenn die Anweisung analysiert und dann ausgeführt wird. Die Ausführungsgeschwindigkeit ist kein Faktor, da der Werteaustausch vor der Ausführung stattfindet.

    
tawman 31.10.2011 14:08
quelle

Tags und Links