Start · Sprachen · PHP · Referenz · db2_procedure_columns

db2_procedure_columns

Funktion

Liefert ein Resultset mit Metadaten zu den Parametern einer gespeicherten Prozedur in einer IBM-DB2-Datenbank.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_procedure_columns(resource $connection, string|null $qualifier, string $schema, string $procedure, string $parameter): resource|false

Beschreibung

db2_procedure_columns() fragt den IBM-DB2-Systemkatalog ab und gibt ein Resultset zurück, das die Parameter einer oder mehrerer gespeicherter Prozeduren beschreibt. Jede Zeile des Resultsets enthält Informationen wie Parametername, Typ (IN, OUT, INOUT), Datentyp, Länge, Präzision und ob NULL-Werte zulässig sind.

Die Funktion ist besonders nützlich beim dynamischen Aufbau von Aufrufen gespeicherter Prozeduren, bei der Datenbankdokumentation oder bei Frameworks, die sich automatisch an die Signatur einer Prozedur anpassen sollen. Mit Platzhaltern (%) in den Such-Parametern können mehrere Prozeduren gleichzeitig abgefragt werden.

Das zurückgegebene Ressource-Handle kann mit den bekannten db2_fetch_*-Funktionen ausgelesen werden, genau wie ein normales SELECT-Ergebnis. Wichtige Spalten im Resultset sind u. a. PROCEDURE_NAME, COLUMN_NAME, COLUMN_TYPE (1 = IN, 2 = INOUT, 4 = OUT), TYPE_NAME, COLUMN_SIZE und NULLABLE.

Die Funktion steht nur zur Verfügung, wenn die IBM DB2-, Cloudscape- oder Apache Derby-Erweiterung (ibm_db2) installiert und geladen ist.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine aktive DB2-Datenbankverbindung, wie sie von db2_connect() oder db2_pconnect() zurückgegeben wird.
$qualifier Pflicht string|null Der Qualifier für Datenbanken auf OS/390- oder z/OS-Systemen. Für andere Plattformen wird null oder ein leerer String übergeben.
$schema Pflicht string Das Datenbankschema, in dem nach der Prozedur gesucht wird. Ein %-Zeichen kann als Wildcard verwendet werden, um alle Schemas zu durchsuchen.
$procedure Pflicht string Der Name der gespeicherten Prozedur. Ein %-Zeichen kann als Wildcard für mehrere Prozeduren verwendet werden.
$parameter Pflicht string Der Name des Parameters, über den Informationen abgefragt werden sollen. Ein %-Zeichen gibt alle Parameter zurück. Ein leerer String '' gibt ebenfalls alle Parameter zurück.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine Statement-Ressource zurück, die mit db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Alle Parameter einer gespeicherten Prozedur auflisten

<?php
$conn = db2_connect('DATENBANK', 'benutzer', 'passwort');

if ($conn) {
    $stmt = db2_procedure_columns($conn, null, 'APP', 'BESTELLUNG_ERSTELLEN', '%');

    if ($stmt) {
        while ($row = db2_fetch_assoc($stmt)) {
            echo 'Parameter: ' . $row['COLUMN_NAME'] . PHP_EOL;
            echo 'Typ:       ' . $row['TYPE_NAME']   . PHP_EOL;
            $colType = match((int)$row['COLUMN_TYPE']) {
                1 => 'IN',
                2 => 'INOUT',
                4 => 'OUT',
                default => 'UNBEKANNT',
            };
            echo 'Richtung:  ' . $colType . PHP_EOL;
            echo '---' . PHP_EOL;
        }
    } else {
        echo 'Fehler: ' . db2_stmt_errormsg();
    }

    db2_close($conn);
} else {
    echo 'Verbindung fehlgeschlagen: ' . db2_conn_errormsg();
}
?>
Parameter: KUNDEN_ID Typ: INTEGER Richtung: IN --- Parameter: GESAMTBETRAG Typ: DECIMAL Richtung: OUT ---

Alle Prozeduren und deren Parameter in einem Schema abfragen

<?php
$conn = db2_connect('DATENBANK', 'benutzer', 'passwort');

if ($conn) {
    // Alle Prozeduren im Schema APP und all ihre Parameter abrufen
    $stmt = db2_procedure_columns($conn, null, 'APP', '%', '%');

    if ($stmt) {
        $aktuelle_prozedur = '';
        while ($row = db2_fetch_object($stmt)) {
            if ($row->PROCEDURE_NAME !== $aktuelle_prozedur) {
                $aktuelle_prozedur = $row->PROCEDURE_NAME;
                echo "=== Prozedur: {$aktuelle_prozedur} ===" . PHP_EOL;
            }
            echo "  - {$row->COLUMN_NAME} ({$row->TYPE_NAME})" . PHP_EOL;
        }
    }

    db2_close($conn);
}
?>
=== Prozedur: BESTELLUNG_ERSTELLEN === - KUNDEN_ID (INTEGER) - GESAMTBETRAG (DECIMAL) === Prozedur: LAGER_AKTUALISIEREN === - ARTIKEL_NR (VARCHAR) - MENGE (INTEGER)

// Wichtig · Fallstricke

Plattformunterstützung: Diese Funktion ist ausschließlich über die ibm_db2-PHP-Erweiterung verfügbar und setzt eine IBM-DB2-, Cloudscape- oder Apache-Derby-Datenbankverbindung voraus. PDO oder andere Datenbanktreiber werden nicht unterstützt.

Groß-/Kleinschreibung: Schemanamen und Prozedurnamen in DB2 sind standardmäßig case-insensitiv und werden intern meist in Großbuchstaben gespeichert. Übergabewerte sollten daher in Großbuchstaben angegeben werden, um sicherzustellen, dass die Abfrage Ergebnisse liefert.

Qualifier: Der Parameter qualifier ist nur für OS/390- und z/OS-Hosts relevant. Auf allen anderen Plattformen (Linux, Windows, AIX) sollte null übergeben werden.