Modul DB: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
Zeile 141: Zeile 141:
  
 
  #sql_intransaction  cmd=test_line  c="Fehler beim Schreiben der Daten"
 
  #sql_intransaction  cmd=test_line  c="Fehler beim Schreiben der Daten"
 +
 +
==#sql_upsert==
 +
 +
Die Prozedur #sql_upsert schreibt einen Datensatz in eine Datenbanktabelle. Je nach Parameter y wird ein UPDATE- oder ein INSERT-Statement ausgeführt.
 +
 +
===Parameter===
 +
 +
* cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y. Funktionen werden ersetzt.
 +
* f_ - ("fields") Die Werte für die einzelnen Spalten werden mit f_-Parametern gesetzt, dem f_ wird jeweils der Spaltenbezeichner angefügt. Funktionen werden ersetzt. Siehe Beispiel.
 +
* hst - ("history") Wenn Y,  wird auch ein Datensatz in die History-Tabelle geschrieben. In den meisten Fällen bedeutungslos, da die History-Tabellen über einen Datenbanktrigger geschrieben werden. Default ist Y.
 +
* k - ("key") Primärschlüsselspalte der Tabelle. Per default wird der Wert aus dem Tabellennamen abgeleitet.
 +
* t - ("table") Name der Tabelle, in die geschrieben wird.
 +
* y - ("type") i - INSERT, u - UPDATE, a - automatic, je nach Existenz eines Datensatzes mit dem entsprechenden Primärschlüssel wird UPDATE oder INSERT ausgeführt. Default i. Funktionen werden ersetzt.
 +
 +
Hinweis: Beim Typ a (automatic) wird erst per SELECT-Statement geprüft, ob ein Datensatz mit dem entsprechenden Primärschlüsselwert vorhanden ist. Dies verlangsamt die Ausführung. Setzen Sie diesen Typ nur dann ein, wenn es erforderlich ist.
 +
 +
===Beispiel===
 +
 +
#upsert  y=i  t=user_group  f_user_group_id=$GUID()  f_type=I  f_path="ig.$DATA(igs,login)"  f_user_user_id=$DATA(igs,user_user_id)  f_status=1
 +
  
 
==#sql_openvalrows==
 
==#sql_openvalrows==

Version vom 1. Oktober 2020, 06:52 Uhr

DB

Im Modul DB werden die Datenbank-Routinen zusammengefasst.

  • #sql fügt dem SQL-Statement eine Zeile hinzu
  • #sql fügt dem SQL-Statement eine Zeile hinzu
  • #sql_clear löscht das SQL-Statement
  • #sql_open führt ein select-Statement aus und ruft für jede Zeile der Datenmenge das angegebene Kommando aus.
  • #sql_openval führt eine select-Statement aus und schreibt das Ergebnis der ersten (ind er Regel der einzigen) Datenzeile in lokale oder globale Variable
  • #sql_openvalrowsführt eine select-Statement aus und schreibt das Ergebnis in lokale oder globale Variablen. Die Werte der verschiedenen Datenzeilen werden durch ein Trennzeichen getrennt.
  • #sql_intransaction führt ein Kommando in einer eigens gestarteten Transaktion aus.

#sql

Die Prozedur #sql fügt dem SQL-Statement eine Zeile hinzu.

Es handelt sich dabei um eine nummerierte Prozedur. #sql fügt dem ersten SQL-Statement eine Zeile hinzu, #sql2 fügt dem zweiten SQL-Statement eine Zeile hinzu, und so weiter.

Parameter

#sql hat keine benannten Parameter. Die ganze Zeile nach dem #text und dem trennenden Leerzeichen wird hinzugefügt.

Funktionen werden ersetzt.

Hinweis

Durch den Aufruf einer der folgenden Prozeduren wird das SQL-Statement (nach der Ausführung) wieder geleert:

  • #sql_open
  • #sql_openval
  • #sql_openvalrows
  • #sql_exec

Beispiel

#sql  select count(*) as cnt
#sql    from user_user
#opensqlval   f_cnt=1

#sql_clear

Die Prozedur #sql_clear löscht das SQL-Statement.

Es handelt sich dabei um eine nummerierte Prozedur. #sql_clear löscht das erste SQL-Statement, #sql_clear2 löscht das zweite SQL-Statement, und so weiter.

Parameter

#sql_clear hat keine Parameter.

Hinweis

Der Aufruf von #sql_clear ist im Regelfall nicht erforderlich, da durch den Aufruf einer der folgenden Prozeduren das SQL-Statement (nach der Ausführung) wieder geleert wird:

  • #sql_open
  • #sql_openval
  • #sql_openvalrows
  • #sql_exec

Allerdings kann es bei einem Fehler vorkommen, dass das SQL-Statement nicht geleert wird und beim Aufbau eines neuen Statements Zeilen der vorherigen Statements zurückgeblieben sind. Das kann mit #sql_clear verhindert werden. Die Prozedur wird üblicherweise vor den Beginn eines neuen Statements gesetzt, siehe Beispiel.

Beispiel

#sql_clear
#sql  select count(*) as cnt
#sql    from user_user
#sql_openval   f_cnt=1

#sql_open

Die Prozedur #sql_open führt ein select-Statement aus und ruft für jede Zeile der Datenmenge das angegebene Kommando aus.

Es handelt sich dabei um eine nummerierte Prozedur. #sql_open ruft das erste SQL-Statement auf, #sql_open2 ruft das zweite SQL-Statement auf, und so weiter.

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y.
  • er - ("each row") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden ersetzt.
  • ern - ("each row no") Das Kommando, das für jede Zeile der Datenmenge aufgerufen wird. Funktionen werden nicht ersetzt. Wenn ern einen Wert hat, bleibt er unberücksichtigt. Üblicherweise wird er verwendet.
  • ert - ("each row transaction") Wenn Y, wird für jede Zeile der Datenmenge eine eigene Transaktion gestartet und nach der Abarbeitung des Kommandos wieder geschlossen.
  • k - ("key") Um Namenskonflikte zu vermeiden, beginnen Parameter im SQL-Statement entsprechend den Konventionen mit einem k. Bei allen Parametern werden Funktionen ersetzt. Siehe auch das Beispiel.
  • m - ("maximum") Es wird maximal für die Anzahl der angegebenen Zeilen das in er angegebene Kommando ausgeführt. Dieser Parameter wird häufig dazu verwendet, während der Entwicklung mit einer geringen Zahl von Datensätzen zu arbeiten.
  • n - Name der Datenmenge, wird benötigt, mit mit $DATA() auf die einzelnen Felder zugreifen zu können.


Beispiel

#sql  select * 
#sql    from user_user
#sql    where upper(lastname) like upper(:kname)
#sql_open  n=test  er=test_line  kname=$EDT(edt1)%

#sql_openval

Die Prozedur #sql_openval führt eine select-Statement aus und schreibt das Ergebnis der ersten (ind er Regel der einzigen) Datenzeile in lokale oder globale Variable.

Es handelt sich dabei um eine nummerierte Prozedur. #sql_openval ruft das erste SQL-Statement auf, #sql_openval2 ruft das zweite SQL-Statement auf, und so weiter.

Parameter

  • f_ - ("Field") Alle Felder der Datenmenge, die in lokale oder globale Variable geschrieben werden sollen, werden mit einem Prefix aufgeführt. Nach dem Gleichheitszeichen folgt die Nummer der globalen Variable ("Value") oder der Name der globalen Variable.
  • k - ("key") Um Namenskonflikte zu vermeiden, beginnen Parameter im SQL-Statement entsprechend den Konventionen mit einem k. Bei allen Parametern werden Funktionen ersetzt. Siehe auch das Beispiel.

Beispiel

#sql2  select * 
#sql2    from user_user  
#sql2    where user_user_id = :kid 
#sql_openval2  kid=$FND(user_user_id)   f_firstname=1   f_lastname=2   f_ldap=ldap

Die Felder firstname und lastname werden in die lokalen Variable ("Values") 1 und 2 geschrieben, das Feld ldap in die globale Variable ldap.

#sql_openvalrows

Die Prozedur #sql_openval führt eine select-Statement aus und schreibt das Ergebnis in lokale oder globale Variablen. Die Werte der verschiedenen Datenzeilen werden durch ein Trennzeichen getrennt.

Die Prozedur #sql_openval wird häufig dazu verwendet, um das Ergebnis mit dem IN-Operator in einer WHERE-Klausel zu verwenden.

Es handelt sich dabei um eine nummerierte Prozedur. #sql_openvalrows ruft das erste SQL-Statement auf, #sql_openvalrows2 ruft das zweite SQL-Statement auf, und so weiter.

Parameter

  • f_ - ("Field") Alle Felder der Datenmenge, die in lokale oder globale Variable geschrieben werden sollen, werden mit einem Prefix aufgeführt. Nach dem Gleichheitszeichen folgt die Nummer der globalen Variable ("Value") oder der Name der globalen Variable.
  • k - ("key") Um Namenskonflikte zu vermeiden, beginnen Parameter im SQL-Statement entsprechend den Konventionen mit einem k. Bei allen Parametern werden Funktionen ersetzt. Siehe auch das Beispiel.
  • sep - ("separator") Trennzeichen, default ist ein Komma.

Beispiel

#sql2  select * 
#sql2    from user_user  
#sql2    where status = 7
#sql_openvalrows2  f_login=1

#sql_intransaction

Führt das Kommando in einer eigens gestarteten Transaktion aus, die beim Auftreten eines Fehlers mit Rollback zurückgenommen wird.

Parameter

  • c - ("Caption") Text der Meldung, wenn die Transaktion zurückgenommen wird.
  • cmd - ("Command") Kommando, das innerhalb der Transaktion ausgeführt wird.

Beispiel

#sql_intransaction   cmd=test_line   c="Fehler beim Schreiben der Daten"

#sql_upsert

Die Prozedur #sql_upsert schreibt einen Datensatz in eine Datenbanktabelle. Je nach Parameter y wird ein UPDATE- oder ein INSERT-Statement ausgeführt.

Parameter

  • cnd - ("condition") Die Prozedur wird nur dann ausgeführt, wenn das Statement in cnd Y ergibt. Default ist Y. Funktionen werden ersetzt.
  • f_ - ("fields") Die Werte für die einzelnen Spalten werden mit f_-Parametern gesetzt, dem f_ wird jeweils der Spaltenbezeichner angefügt. Funktionen werden ersetzt. Siehe Beispiel.
  • hst - ("history") Wenn Y, wird auch ein Datensatz in die History-Tabelle geschrieben. In den meisten Fällen bedeutungslos, da die History-Tabellen über einen Datenbanktrigger geschrieben werden. Default ist Y.
  • k - ("key") Primärschlüsselspalte der Tabelle. Per default wird der Wert aus dem Tabellennamen abgeleitet.
  • t - ("table") Name der Tabelle, in die geschrieben wird.
  • y - ("type") i - INSERT, u - UPDATE, a - automatic, je nach Existenz eines Datensatzes mit dem entsprechenden Primärschlüssel wird UPDATE oder INSERT ausgeführt. Default i. Funktionen werden ersetzt.

Hinweis: Beim Typ a (automatic) wird erst per SELECT-Statement geprüft, ob ein Datensatz mit dem entsprechenden Primärschlüsselwert vorhanden ist. Dies verlangsamt die Ausführung. Setzen Sie diesen Typ nur dann ein, wenn es erforderlich ist.

Beispiel

#upsert  y=i   t=user_group   f_user_group_id=$GUID()   f_type=I   f_path="ig.$DATA(igs,login)"   f_user_user_id=$DATA(igs,user_user_id)   f_status=1


#sql_openvalrows

Parameter

Beispiel