Anmelden

View Full Version : exec sql drop variable



Seiten : 1 2 [3]

Fuerchau
17-01-13, 10:36
Ich denke mal, da die Variable letztendlich lokal ist (Job) hat eben drop variable keinen Effekt auf das Objekt selber. Dies dient nur der Typdefinition der Variable, was man eigentlich durch einen UDT auch lösen kann.

In SQL gibt es (je nach Datenbank) halt noch den Begriff "Session Variable", was der Verwendung wohl näher kommt.
Zumal diese dann nach Close Connection auch wieder weg ist.
Auch gibt es Variablen für die aktuelle Transaktion, die dann nach Commit/Rollbback auch wieder weg sind.

Im Sinne von Global scheint mir das aber doch eher für die ACTGRP zu gelten. Schließlich kann ich ja je ACTGRP eigene Verbindungen zur DB aufnehmen und jeweils separat die Variable verwenden.
Nicht auszudenken, welche Verwirrungen es gibt (siehe Dieter), wenn eine ACTGRP die Variable einer anderen ACTGRP überschreibt.

Stelle ich dann meine Software auf ODBC/JDBC um habe ich ja je Verbindung auch noch einen eigenen Job, so dass ich mich nun auf obige Verwirrung auch noch nicht mal verlassen kann.

BenderD
17-01-13, 10:58
Nicht auszudenken, welche Verwirrungen es gibt (siehe Dieter), wenn eine ACTGRP die Variable einer anderen ACTGRP überschreibt.


Das kann nicht passieren, da das ja gerade Connection bezogen ist. Was da rein technisch im Hintergrund passiert (Generierung eines Serviceprogramms) ist zwar abenteuerlich, aber isoliert auch betreffs unterschiedlicher Typen die Sessions untereinander und interessiert mich im Grunde wenig.

Variablen gibt es auch in SQL PL (procedure language) und diese haben immer den scope innerhalb der Procedure; die mit create variablen haben darüber hinausgehende Sichtbarkeit, das ist eher das Pendant zum Export von Variablen im ILE und in diesem Sinne erklärt sich auch der Name global - mißverständlich ist in erster Linie die Formulierung in der SQL Reference: "The CREATE VARIABLE statement defines a global variable at the application server."

Ich habe inhaltlich zwei Einwände:
- Variablen gehören nicht exportiert, weil ein anderer Prozess im callstack den Inhalt einer solchen Variablen unkontrollierbar korrumpieren kann.
- die Mimik in mixed Environment angewandt macht die Tür auf in ein RPG Programm sowas wie eine SQL Procedure schrittweise einzubetten und dass sowas schief geht, hat man schon mit Scriptlets in JSPs und Javascript und auch PHP zur genüge ausprobiert.

Sollte mir doch noch jemand ein Beispiel liefern, wo man das braucht, dann kann man das ja konstruktiv weiterentwickeln.

D*B

andreaspr@aon.at
17-01-13, 12:07
Zu beachten ist auch dass globale Variablen von Commitment Control ausgeschlossen sind!
Nach einem Commit oder Rollback steht in der Variable noch der gleiche Wert wie zuvor.

Fuerchau
17-01-13, 15:31
Nun, das ist ja auch mit dem Begriff Global, besser Session/Connection, eindeutig gesagt.