Aktuelle Datenbankverbindung und Ausführen von Datenbankprozeduren und -funktionen.
Aktuelle Datenbankverbindung und Ausführen von Datenbankprozeduren und -funktionen. über die aktuelle Datenbankverbindung können auch Transaktionen ausgeführt werden, verwenden sie dazu sql::query und die Klasse query.
Query erfordert #include "internal/types.h"
static DBC sql::dbconnection()
Hole die aktuelle Datenbankverbindung. Die Datenbankverbindung darf niemals über einen Skriptbefehl gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | DBC | Aktuelle Datenbankverbindung von InDesign® oder 0 |
static DBC sql::connection()
Hole die aktuelle Datenbankverbindung. Die Datenbankverbindung darf niemals über einen Skriptbefehl gelöscht werden. Der Befehl kann synonym für sql::dbconnection verwendet werden.
Name | Typ | Default | Beschreibung |
Return | DBC | Aktuelle Datenbankverbindung von InDesign® oder 0 |
static DBC sql::login(
char* service = 0,
char* user = 0,
char* passwd = 0,
char* dbname = 0,
char* client = 0)
Stelle eine Datenbankverbindung zu einem Datenbank-Service her. Ist eine der Angaben gleich 0 (nicht ""!!), wird der Logindialog geöffnet. Das Ergebnis sollte auf jeden Fall auf 0 geprüft werden. Der erhaltene Zeiger muss mit sql::logout wieder gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | DBC | Zeiger auf die Datenankverbindung bei erfolgreicher Verbindung oder 0. Der Zeiger muss mit sql::logout wieder gelöscht werden! | |
service | String oder char* | 0 | Servicename |
user | String oder char* | 0 | Benutzername |
passwd | String oder char* | 0 | Passwort |
dbname | String oder char* | 0 | Datenbankname |
client | String oder char* | 0 | Clientinformationen |
Stelle eine Verbindung zum Datenbankservice werk2 her. Es wird automatisch ein Logindialog gezeigt der mit den Werten werk2 und paul als Benutzername vorbelegt ist.
DBC dbc = sql::login ( "werk2", "paul", 0, 0, 0); : if (!dbc) ... : sql::logout (dbc);
Stelle eine Verbindung zum Datenbankservice werk2 her. Die Verbindung wird ohne Logindialog erstellt.
DBC dbc = sql::login ( "werk2", "paul", "pauls_passwort", "", ""); : if (!dbc) ... : sql::logout (dbc);
static int sql::logout(DBC dbc)
Trennen der Verbindung zu einem Datenbankservice.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | dbc | - | Zeiger auf eine mit login erstellte Datenbankverbindung. Der Befehl darf nicht die Datenbankverbindung von InDesign® (sql::connection) lösen! |
static Query sql::query(DBC dbc)
Erzeuge einen neuen Transaktionsquery. Die InDesign® Datenbankverbindung darf niemals über einen Skriptbefehl gelöscht werden..
Name | Typ | Default | Beschreibung |
Return | Query | Ein neuer Query zur Behandlung von Datenbanktransaktionen. Ist dbc leer, gibt der Aufruf 0 zurück. Sie sollten den erhaltenen Query in jedem Fall auf 0 testen. | |
dbc | DBC | - | Gültige Datenbankverbindung, dbc kann auch eine SOAP-Verbindung enthalten. Alle Befehle, die an den Query gestellt werden, werden dann von diesem Service ausgeführt. |
Erzeuge einen neuen Transaktionsquery
DBC dbc = sql::dbconnection (); Query qu = sql::query (dbc);
if (!qu) { Fehlermeldung und eventuell Abbruch }
static int sql::call(
DBC dbc,
char* fname,
void* ret_val,
...)
Mit den Methoden sql::call und sql::calln können Prozeduren und Funktionen (stored procedures) einer Datenbank ausgeführt werden.
Dieser Prozess wird im allgemeinen mit remote procedure call (RPC) bezeichnet. RPCs können Ein- und Ausgabeparameter und
Rückgabewerte haben. cscript unterstützt die gebräuchlichsten Datentypen für Parameter und Rückgabewerte : ganze Zahlen, reelle Zahlen und Strings.
Werden Strings als Outparameter eines Aufrufes verwendet, sollten dafür
mindestens SQL_MAXSTRLEN (=4001) Byte reserviert sein!Bei OCI-Verbindungen kann sql::call nicht verwendet werden. Benutzen Sie stattdessen sql::calln.
[err_code = ] sql::call ( dbc, proc_name, // Prozedurname return_value | 0 // Rückgabewert oder 0 { , parameter1 , parameter2 : , parametern })Es wird zwischen zwei Methoden unterschieden, die erste, sql::call, benötigt keine Beschreibung der Rückgabewerte und Parameter. Sie ist einfacher zu programmieren aber, weil sie diese Informationen zuerst von der Datenbank erfragen muss, deutlich langsamer.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode 1 Keine Datenbankverbindung 2 Prozedur oder Funktion nicht gefunden 3 Prozedurparameter können nicht ermittelt werden 4 Returnwert einer Funktion nicht angegeben 5 Fehler beim Ausführen des RPC 6 wrong type, must be kInt | kFloat | kString 7 wrong column type, must be kIn | kOut | kInout -41 Kein Arbeitsspeicher mehr |
|
dbc | DBC | - | aktuelle Datenbankverbindung |
fname | String oder char* | - | Name einer Datenbankfunktion oder -prozedur |
ret_value | Adresse | - | Zeiger auf eine Rückgabevariable bei Funktionen oder 0 bei Prozeduren. Es ist Aufgabe des Skriptprogrammierers, den richtigen Datentyp zu wählen. |
[parameter] | Wert oder Adresse | - | Eingabeparameter : Wert oder Adresse Ein- und Ausgabeparameter : Adresse Ausgabeparameter : Adresse |
siehe sql::calln
static int sql::calln(
DBC dbc,
char* fname,
void* ret_val,
int ret_type,
int param_count,
...)
Ausführen einer Datenbankfunktion oder -prozedur.
Dieser Prozess wird im allgemeinen mit remote procedure call (RPC) bezeichnet.
RPCs können Ein- und Ausgabeparameter und Rückgabewerte haben.
cscript unterstützt die gebräuchlichsten Datentypen für Parameter und Rückgabewerte :
ganze Zahlen, reelle Zahlen und Strings.
Werden Strings als Outparameter eines Aufrufes verwendet, sollten dafür
mindestens SQL_MAXSTRLEN (=4001) Byte reserviert sein!
[err_code = ] sql::calln ( dbc, proc_name, ret|0, type, counter, // Anzahl der Parameter [ , val, inout, type // 1.Parameter , val, inout, type // 2.Parameter : ])
Es wird zwischen zwei Methoden unterschieden. In sql::calln wird eine Beschreibung der Parameter und des Rückgabewertes erwartet. Der Schreibaufwand führt zu einer wesentlich schnelleren Ausführung der Funktion als der der vergleichbaren Funktion sql::call, die Parameter- und Rückgabetypen erst über die Datenbank ermitteln muss.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode 1 Keine Datenbankverbindung 2 Prozedur oder Funktion nicht gefunden 3 Prozedurparameter können nicht ermittelt werden 4 Returnwert einer Funktion nicht angegeben 5 Fehler beim Ausführen des RPC 6 wrong type, must be kInt | kFloat | kString 7 wrong column type, must be kIn | kOut | kInout -41 Kein Arbeitsspeicher mehr |
|
dbc | DBC | - | aktuelle Datenbankverbindung |
fname | String oder char* | - | Name einer Datenbankfunktion oder -prozedur |
ret_val | Addresse | - | Zeiger auf eine Rückgabevariable bei Funktionen oder 0 bei Prozeduren |
ret_type | int | - | Zum Rückgabewert der Funktion passende Typangabe (kInt, kFloat , kString) oder kIgnore bei Prozeduren. |
param_count | int | - | Anzahl der Parameter der Datenbankfunktion oder -prozedur. param_count Triples der folgenden Parameter müssen folgen. |
param_value | Wert oder Adresse | - | param_inout == kIn Wert oder Adresse param_inout == kInout oder kOut Adresse |
param_inout | int | - | Ist der Parameter ein Ein- und/oder Ausgabeparameter? Wählen sie eine der folgenden Angaben kIn, kInout, kOut. Es ist Aufgabe des Skriptprogrammierers, den richtigen Parametertyp zu wählen. kInout darf bei OCI-Verbindungen nicht verwendet werden! |
param_type | int | - | Welchen Datentyp haben Wert und Parameter. Wählen sie einen der folgenden Datentypen kString, kFloat ,kString. Es ist Aufgabe des Skriptprogrammierers, den richtigen Datentyp zu wählen. |
: | Weitere Tripel gemäß param_count |
Folgende Testtabelle sei definiert :
create table PP1_Table ( number(10) not null, varchar2(255), number(10,2));
Und folgende Funktion sei definiert :
create or replace function PP1_Function_Str ( id number, i out number, str in out varchar2, f out number) RETURN VARCHAR2 AUTHID CURRENT_USER is begin i := id; str := str || ' : ' || to_char (i)||' - inserted' ; f := i/2.0; insert into PP1_Table values (id, str,f); commit; return str; end PP1_Procedure; /
Das folgende Skript sollte zwei Meldungen schreiben :
a=10, b='Hihi ... : 10 - inserted', c=5.0000
a=10, b='Hihi ... : 11 - inserted', c=5.5000
überprüfen Sie auch den Inhalt der Tabelle PP1_Table, hier sollten zwei Einträge hinzugekommen
sein.
#include "internal/types.h" int main () { char * name = "PP1_Function_str"; char s[SQL_MAXSTRLEN]; int a; char b[SQL_MAXSTRLEN]; float c; int err; strcpy (b, "Yeah, es klappt, das war InDesign"); err = sql::call ( sql::dbconnection (), "c-comment">// current connection name, "c-comment">// function s, "c-comment">// return value 10, &a, b, &c); if (err != 0) showerror ("Fehler %d bei sql::call '%s'", err, name); else showmessage ("a=%d, b='%s', c=%f", a, b, c); err = sql::calln ( sql::dbconnection (), "c-comment">// current connection name, s, kString, "c-comment">// return value 4, "c-comment">// Anzahl der Parameter 11, kIn, kInt, &a, kOut, kInt, b, kInout, kString, &c, kOut, kFloat); if (err != 0) showerror ("Fehler %d bei sql::call '%s'", err, name); else showmessage ("a=%d, b='%s', c=%f", a, b, c); return 0; }
static char* sql::server(DBC dbc, char* str)
Ermittle den Servernamen einer Datenbankverbindung.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Name des Servers, den die angegebene Datenbankverbindung verwendet. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | DBC | - | Datenbankverbindung |
str | String oder char* | - | Reservierter Speicher für den Servernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", sql::server (sql::dbconnection (), s));
static char* sql::user(DBC dbc, char* str)
Ermittle den Benutzernamen, mit dem eine Datenbankverbindung hergestellt wurde.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Benutzername für die angegebene Datenbankverbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | DBC | - | Datenbankverbindung |
str | String oder char* | - | Reservierter Speicher für den Benutzernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", sql::user (sql::dbconnection (), s));
static int sql::userid(DBC dbc)
Ermittle die eindeutige iQuest Comet BenutzerID der Datenbankverbindung.
Name | Typ | Default | Beschreibung |
Return | int | BenutzerID oder 0 | |
dbc | DBC | - | Datenbankverbindung |
showmessage ("%d", sql::userid (sql::dbconnection ()));
static char* sql::dbname(DBC dbc, char* str)
Ermittle den Namen der Datenbank zu der eine Verbindung hergestellt wurde.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Datenbankname/Schema für die angegebene Datenbankverbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | DBC | - | Datenbankverbindung |
str | String oder char* | - | Reservierter Speicher für den Servernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", sql::dbname (sql::dbconnection (), s));
static char* sql::client(DBC dbc, char* str)
Ermittle den Mandanten, der beim Einloggen in der Datenbank angegeben wurde.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Mandant für die angegebene Datenbankverbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | DBC | - | Datenbankverbindung |
str | String oder char* | - | Reservierter Speicher für den Mandatennamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", sql::client (sql::dbconnection (), s));
static int sql::charset(DBC dbc)
Zeichensatz der Datenverbindung.
Name | Typ | Default | Beschreibung |
Return | int | -1 : Fehler 0 : Systemzeichensatz 1 : UTF-8 2 : Unicode 16 Bit 3 : Unicode 32 Bit |
|
dbc | DBC | - | Datenbankverbindung |
Alphabetic index HTML hierarchy of classes or Java