Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SQL_BLOB_VAL_OPEN - SQLbvop

Der CLI-Aufruf SQL_BLOB_VAL_OPEN öffnet ein Access-Handle. Ein Access-Handle benötigen Sie zur sequenziellen Bearbeitung von BLOB-Werten. In SESAM/SQL können Sie BLOB-Werte mit SQL_BLOB_VAL_FETCH (siehe "SQL_BLOB_VAL_FETCH - SQLbvfe") sequenziell lesen und mit SQL_BLOB_VAL_STOW (siehe "SQL_BLOB_VAL_STOW - SQLbvst") sequenziell schreiben.

Ist das sequenzielle Bearbeiten mit dem Access-Handle abgeschlossen, beenden Sie dieses mit dem Aufruf SQL_BLOB_VAL_CLOSE (siehe "SQL_BLOB_VAL_CLOSE - SQLbvcl"). Das Access-Handle muss innerhalb derselben Transaktion geöffnet und wieder geschlossen werden.

Durch wiederholtes Anwenden der oben genannten CLI-Aufrufe zum Schreiben oder Lesen, wird der BLOB-Wert stückweise bearbeitet. Damit dies korrekt erfolgen kann, wird ein Access-Handle benötigt, das die folgenden internen Informationen verwaltet:

  • Informationen darüber welcher BLOB-Wert angesprochen wird und

  • über den Fortschritt des Lesens oder des Schreibens (welches Teilstück beispielsweise als nächstes gelesen bzw. geschrieben werden muss).

Als Parameter geben Sie den REF-Wert, den Datenbanknamen und ForWriteAccess an. Mit ForWriteAccess legen Sie fest, ob in dem Access-Handle gelesen oder geschrieben wird.
Das Access-Handle erhält von SESAM/SQL eine eindeutige Identifikation, die Sie beim jeweiligen Aufruf von SQL_BLOB_VAL_FETCH und SQL_BLOB_VAL_STOW angeben müssen.

Sie können bis zu 10 Access-Handle gleichzeitig öffnen, d.h. 10 sequenzielle Bearbeitungen von BLOB-Objekten parallel durchführen. Falls Sie eine 11. sequenzielle Bearbeitung parallel durchführen wollen, bekommen Sie eine entsprechende Meldung.

Versäumen Sie es, am Ende einer sequenziellen Bearbeitung SQL_BLOB_VAL_CLOSE abzusetzen, bleibt das Access-Handle als „belegt“ gekennzeichnet. Eine optimale Ausnutzung der 10 gleichzeitig zu öffnenden Access-Handle ist dann nicht mehr möglich.

Öffnen Sie ein Access-Handle zum Schreiben und hat das zu bearbeitende BLOB-Objekt bereits einen BLOB-Wert, wird dieser alte BLOB-Wert durch den Aufruf von SQL_BLOB_VAL_OPEN gelöscht, d.h. er hat die Länge 0. Das BLOB-Objekt selbst bleibt erhalten.

Eine parallele sequenzielle Bearbeitung des gleichen BLOB-Objektes durch mehrere schreibende Sequenzen sollte vermieden werden, da die schreibenden Sequenzen gegenseitig den BLOB-Wert beeinflussen können.

SQL_BLOB_VAL_OPEN zum Lesen erfordert das SELECT-Privileg auf die BLOB-Tabelle. SQL_BLOB_VAL_OPEN zum Schreiben erfordert die Privilegien SELECT und DELETE auf die BLOB-Tabelle und das UPDATE-Privileg auf die Spalte slice_val der BLOB-Tabelle.

CLI-Deklaration in C:

void SQL_BLOB_VAL_OPEN( char const *REFvalue
          ,char const *CatalogId
          ,long int *ForWriteAccess
          ,char *AccesHandle
          ,struct SQLda_t *SQLda);

CLI-Deklaration in COBOL:

IDENTIFICATION DIVISION.
PROGRAM-ID. SQLbvop IS PROTOTYPE.
DATA DIVISION.
LINKAGE SECTION.
   01 REFvalue PIC X(237).
   01 CatalogId PIC X(31).
   01 ForWriteAccess PIC S9(9) COMP.
   01 AccesHandle PIC X(32).
   COPY SQLCA.     *> for group item SQLda.
PROCEDURE DIVISION USING REFvalue, CatalogId, ForWriteAccess, AccesHandle, 
          SQLda.
END PROGRAM SQLbvop.


REFvalue

Der REF-Wert des BLOB-Objekts. Die genaue Struktur des REF-Werts ist auf "Spaltendefinition" beschrieben.

CatalogId

Name der Datenbank, in der die Tabelle liegt. CatalogId ist ein einfacher Name (siehe Abschnitt „Einfache Namen"). Der Name muss gegebenenfalls mit Leerzeichen auf 31 Zeichen verlängert oder mit einem Null-Byte abgeschlossen werden. Soll der Name der voreingestellten Datenbank verwendet werden, so müssen Sie statt des Datenbanknamens ein Null-Byte, ein oder mehrere Leerzeichen angeben.

ForWriteAccess

Als Eingabe sind hier die Werte 1 (=TRUE) oder 0 (=FALSE) möglich. Die Werte haben folgende Bedeutung:

0:

Es wird ein Access-Handle zum Lesen (mit SQL_BLOB_VAL_FETCH) geliefert.
.

1:

Es wird ein Access-Handle zum Schreiben (mit SQL_BLOB_VAL_STOW)
geliefert.

AccessHandle

Der ausgebene Wert für AccessHandle dient zur Identifikation des Access-Handles. Sie dürfen diesen Wert nicht modifizieren, da er in allen nachfolgenden Operationen bis zum abschließenden Aufruf SQL_BLOB_VAL_CLOSE verwendet wird.

SQLda

Diagnosebereich.