2016-06-24 19 views
0

Ich habe eine gespeicherte Prozedur mit einem Anfang Ende Block. Zum Beispiel gibt es wenige Select-Anweisungen und Update-Anweisungen in diesem Block.sqls in einem Begin-End-Block in Sybase verarbeitet ase

In diesem begin-Block werden alle sqls zusammen oder sequentiell ausgeführt, je nachdem, wie sie geschrieben sind?

begin 
     select stmt 
     update stmt 
     select stmt 
     . 
     . 
    end 
+0

Fragen Sie wethet die Anweisungen werden sequentiell oder parallel ausgeführt, oder was genau ist die Frage? :) – Brimstedt

+0

Ja. Ich möchte wissen, ob alle sqls nacheinander in der Reihenfolge ausgeführt werden, in der es definiert ist, oder alle sqls in der begin end block parallel.basic Idee ist ich habe eine tote Sperre und wir wollen wissen, ob es wegen der Begin End Block – doubting

+0

Der Deadlock sollte nicht wegen der in einer Prozedur von einem Thread ausgeführten schwerwiegenden Anweisungen sein. Wenn die Prozedur gleichzeitig von vielen Threads ausgeführt wird, kann sie jedoch nicht mehr funktionieren. – Brimstedt

Antwort

1

Die Anweisungen in einer gespeicherten Prozedur werden nacheinander ausgeführt.

Das einzige, was Sie nicht wissen, das Ordet von, und das parallel ausgeführt werden kann, sind die verschiedenen Unterschritte intern in jeder Anweisung.

Zum Beispiel in:

SELECT a, b 
    FROM table t 
    INNER JOIN other o 
     ON o.id = t.id 
    INNER JOIN third d 
     ON d.o_id = o.o_id 
    WHERE t.b = 123 

    UPDATE t 
    SET x = 123 
    FROM table t 
    WHERE t.b = 234 

Die Auswahl wird immer vor dem Update ausgeführt werden, aber in der select-Anweisung, Sie wissen nicht, ob ‚Tisch‘ mit ‚anderen‘ ersten verbunden ist, und die mit 'dritten' verbunden, oder wenn 'andere' mit 'dritte' und dann mit 'Tabelle' verbunden wird.

0

Alle Anweisungen in begin - End-Block sequenziell ausgeführt. Ich habe dieses Problem von Deadlock und seiner möglichen konfrontiert, weil Prozedur in mehreren Thread ausgeführt werden muss.

Wenn dies in einem oder zwei Threads ausgeführt werden kann und Transaktionen klein sind, kann der Prozess warten, bis er in Deadlocks eskaliert. Oder fügen Sie try catch block mit Fehlernummer für Deadlock hinzu, um die Aktualisierung zu wiederholen, wenn der Deadlock-Fehler auftritt.

Verwandte Themen