db2cli - DB2-Befehl für interaktive Befehlszeilenschnittstelle (CLI) zum Ausführen von SQL-Anweisungen

Der Befehl db2cli ist ein Befehl für die interaktive Befehlszeilenschnittstelle, der die interaktive CLI-Umgebung (CLI - Call Level Interface), eine Umgebung für die Erstellung von Entwürfen und Prototypen, startet. Mit dem Befehl db2cli können in einer Datei enthaltene SQL-Anweisungen ausgeführt und geprüft werden.

Die ausführbare db2cli-Datei befindet sich im DB2-Installationsunterverzeichnis sqllib/samples/cli/ des Ausgangsverzeichnisses des Datenbankinstanzeigners. Bei IBM® Data Server Driver für ODBC and CLI befindet sich die ausführbare Datei db2cli im Installationsverzeichnis clidriver/bin.

In diesem Thema wird lediglich die pureQuery-Funktion des Befehls db2cli beschrieben. Die pureQuery-Funktion wird durch die Option execsql des Befehls bereitgestellt. CLI-Informationen zu dem Befehl finden Sie im Abschnitt zum DB2-Befehl db2cli für die interaktive Befehlszeilenschnittstelle im Information Center für DB2 for Linux, UNIX, and Windows.

Dieses Thema ist in die folgenden Abschnitte unterteilt:

Berechtigung

Keine

Erforderliche Verbindung

Keine

Befehlssyntax

Syntaxdiagramm lesenSyntaxdiagramm überspringen
>>-db2cli--+-| execsql-Modus |-+-------------------------------><
           '- -help------------'   

execsql-Modus

           (1)  .- -execute-----.   
|--execsql------+---------------+------------------------------->
                '- -prepareonly-'   

>--+-| Serveroption |-----------+-- -inputsql--SQL-Datei-------->
   '- -connstring--Zeichenfolge-'                          

>--+-------------------------+---------------------------------->
   '- -outfile--Ausgabedatei-'   

>--+---------------------------------+-------------------------->
   '- -statementdelimiter--Begrenzer-'   

>--+-----------------------------------+------------------------>
   '- -commentstart--Kommentaranzeiger-'   

>--+---------------------------+-------------------------------->
   '- -cursorhold--Lebensdauer-'   

>--+------------------------------------------+----------------->
   '- -cursorconcurrency--gemeinsamer_Zugriff-'   

>--+-------------------+--+--------+----------------------------|
   '- -cursortype--Typ-'  '- -help-'   

Serveroption

|-- -dsn--Datenquellenname--+-----------------------+-----------|
                            '-| Authentifizierung |-'   

Authentifizierung

|-- -user-- -Benutzername--+--------------------+---------------|
                           '- -passwd -Kennwort-'   

Anmerkungen:
  1. Bei allen Optionen für den execsql-Modus muss die Groß-/Kleinschreibung nicht beachtet werden. Die Optionen können in beliebiger Reihenfolge angegeben werden.

Eine Beschreibung der in diesem Diagramm verwendeten Konventionen finden Sie in Informationen zum Lesen von Syntaxdiagrammen.

Beschreibungen der Optionen

Die folgenden Optionen sind die für pureQuery spezifischen Optionen für den Befehl db2cli.

-cursorconcurrency gemeinsamer_Zugriff
Gibt die auf alle Anweisungen anzuwendende Cursorparallelität an. Verwenden Sie einen der folgenden Werte für gemeinsamer_Zugriff:
readonly
Legt die Cursorparallelität als schreibgeschützt fest. readonly ist der Standardwert.
lock
Der Cursor verwendet die niedrigste Sperrstufe, bei der noch gewährleistet ist, dass die Zeile aktualisiert werden kann. Dieser Wert wird vom Nur-Vorwärtscursor und Schlüsselsatzcursor unterstützt.
values
Der Cursor verwendet die Überprüfung auf gleichzeitige optimistische Schreib- und Lesezugriffe und führt vor dem Festschreiben einen Wertevergleich durch.
-cursorhold Lebensdauer
Gibt die auf alle Anweisungen anzuwendende Cursoroffenhaltung an. Verwenden Sie einen der folgenden Werte für die Offenhaltung:
yes
Die Cursor werden bei der Festschreibung der Transaktion nicht gelöscht.
no
Die Cursor werden bei der Festschreibung der Transaktion gelöscht.

Der Standardwert ist yes.

-cursortype Typ
Gibt den zulässigen Cursortyp an. Verwenden Sie einen der folgenden Werte für Typ:
dynamic
Ein dynamischer verschiebbarer Cursor, der Einfügungen, Löschungen und Aktualisierungen für die Ergebnismenge erkennt und an dieser die entsprechenden Änderungen vornimmt. Dynamische Cursor werden nur bei Zugriffen auf Datenserver mit DB2 for z/OS ab Version 8.1 unterstützt.
forwardonly
Der Cursor kann nur vorwärts verschoben werden. Der Standardtyp ist forwardonly.
keyset
Ein schlüsselsatzgesteuerter verschiebbarer Cursor, der Änderungen an den zugrunde liegenden Daten erkennen und vornehmen kann.
static
Die Daten in der Ergebnismenge sind statisch.

Hinweise

Die SQL-Eingabedatei darf nur SQL-Anweisungen und Kommentare enthalten. In der Datei dürfen keine CLI-spezifischen Attribute oder Schlüsselwörter vorhanden sein.

In der SQL-Eingabedatei sind nur vorbereitbare SQL-Anweisungen zulässig. DB2-Befehle wie DESCRIBE TABLE und BIND sind nicht zulässig.

Enthält die Datei SQL-Anweisungen, die von DDL in der Eingabedatei abhängig sind, müssen Sie alle DDL-Anweisungen ausführen, bevor Sie den Befehl db2cli execsql -prepareonly ausführen.

Wenn Sie die Option -execute mit dem Befehl db2cli execsql verwenden, dürfen die SQL-Anweisungen keine Parametermarken enthalten.

SQL-Stapelanweisungen werden nicht unterstützt.

Die SQL-Anweisungen werden mit der DB2-CLI-API SQLExecDirect() ausgeführt. Wenn der Befehl db2cli SQL-Anweisungen für eine Datenbank ausführt, erkennt der Befehl die Einstellungen, die in der Datei db2cli.ini oder db2dsdriver.cfg für die Datenbank angegeben sind.

Bei der vom Befehl db2cli in einer Fehlernachricht zurückgegebenen Zeichenfolge handelt es sich um die Zeichenfolge, die von der CLI-Fehlerbehandlungs-API SQLError() oder SQLGetDiagRec() zurückgegeben wird.

Beispiele

Beim folgenden Beispiel wird davon ausgegangen, dass die folgende Tabelle und folgenden Prozeduren in der Datenbank SAMPLE erstellt werden:
  create table employee(empid integer, empname varchar(100)

  CREATE PROCEDURE proc1 (  ) 
  DYNAMIC RESULT SETS 1 P1: 
  BEGIN
    DECLARE cursor1 CURSOR WITH RETURN FOR  SELECT * FROM fprem;  
    OPEN cursor1;
  END P1

  CREATE PROCEDURE PROC2(IN ID1 INTEGER,OUT NAME VARCHAR(20)) 
  BEGIN 
  DECLARE CUR1 CURSOR WITH RETURN TO CALLER FOR SELECT * FROM EMPLOYEE1 WHERE ID=ID1; 
    OPEN CUR1; 
  END

Bei dem Beispiel wird des Weiteren angenommen, dass die SQL-Datei test.sql den folgenden Text enthält:

--Populate table( employee )
insert into employee(empid, empname) values(1, 'Adam')
insert into employee(empid, empname) values(2, 'Atul')
select empid, empname  from employee

--Execute the stored procedure
Call proc1( )

Sie geben den folgenden db2cli-Befehl in einem Konsolfenster ein, um die SQL-Anweisungen in der Datei auszuführen:

db2cli execsql –dsn sample –inputsql test.sql

Der folgende Text wird im Konsolfenster angezeigt:

IBM DATABASE 2 Interactive CLI Sample Program
(C) COPYRIGHT International Business Machines Corp. 1993,1996
All Rights Reserved
Licensed Materials - Property of IBM
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

insert into employee(empid, empname) values(1, 'Adam')
Der SQL-Befehl wurde erfolgreich ausgeführt.

insert into employee(empid, empname) values(2, 'Atul')
Der SQL-Befehl wurde erfolgreich ausgeführt.

select empid, empname  from employee

EMPID EMPNAME
1, Adam
2, Atul

Call proc1()

EMPID EMPNAME
1, Adam
2, Atul

Sie können eine CALL-Anweisung für eine gespeicherte Prozedur ausführen, die über OUT-Argumente verfügt. Das Fragezeichen (?) kann als OUT-Parameter verwendet werden.

Im folgenden Beispiel wird davon ausgegangen, dass die SQL-Scriptdatei test2.sql den folgenden Text enthält:

CALL PROC2( 1, ?)

Sie geben den folgenden db2cli-Befehl in einem Konsolfenster ein, um die SQL-Anweisungen in der Datei auszuführen:

db2cli execsql –dsn sample –inputsql test2.sql 

Der folgende Text wird im Konsolfenster angezeigt:

>Wert der Ausgabeparameter
--------------------------
Parametername: NAME
Parameterwert: -

ID
-----------
    1

Geben Sie die Option -prepareonly an, um die SQL-Anweisungen vorzubereiten, ohne diese auszuführen. Die DDL-Anweisungen, die für die SQL-Anweisungen erforderlich sind, müssen ausgeführt werden, bevor Sie den Befehl db2cli execsql mit der Option -prepareonly ausführen.

Im folgenden Beispiel wird davon ausgegangen, dass die SQL-Datei test3.sql den folgenden Text enthält:

--populate table( employee )
insert into employee(empid, empname) values(1, 'Adam');
insert into employee(empid, empname) values(2, 'Atul');
select empid, empname  from employee;

Es wird weiterhin davon ausgegangen, dass die Tabelle EMPLOYEE in der Datenbank erstellt wurde.

Sie geben den folgenden db2cli-Befehl in einem Konsolfenster ein, um die SQL-Anweisungen in der Datei vorzubereiten:

db2cli execsql –prepareonly –dsn sample –inputsql test3.sql

Der folgende Text wird im Konsolfenster angezeigt:

IBM DATABASE 2 Interactive CLI Sample Program
(C) COPYRIGHT International Business Machines Corp. 1993,1996
All Rights Reserved
Licensed Materials - Property of IBM
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

insert into employee(empid, empname) values(1, 'Adam')
Der SQL-Befehl wurde erfolgreich vorbereitet.

insert into employee(empid, empname) values(2, 'Atul')
Der SQL-Befehl wurde erfolgreich vorbereitet.

select empid, empname  from employee
Der SQL-Befehl wurde erfolgreich vorbereitet.

Wenn Sie die für DML-Anweisungen erforderlichen DDL-Anweisungen jeweils in derselben Datei einfügen, schlagen die DML-Anweisungen fehl, die die DDL-Anweisungen erfordern. Beispiel: Angenommen, die Datei test4.sql enthält den folgenden Text und die Tabelle EMPLOYEE wurde in der Datenbank nicht erstellt:

--create and populate table( employee )
create table employee(empid integer, empname varchar(100));
insert into employee(empid, empname) values(1, 'Adam');
insert into employee(empid, empname) values(2, 'Atul');
select empid, empname  from employee;

-- try to create another table with the same name
create table employee(empid integer, empname varchar(100));

Bevor die Anweisungen INSERT und SELECT erfolgreich ausgeführt werden können, muss die Anweisung CREATE TABLE ausgeführt werden.

Sie geben den folgenden db2cli-Befehl in einem Konsolfenster ein, um die SQL-Anweisungen in der Datei vorzubereiten:

db2cli execsql –prepareonly –dsn sample –inputsql test4.sql

Der folgende Text wird im Konsolfenster angezeigt:

IBM DATABASE 2 Interactive CLI Sample Program
(C) COPYRIGHT International Business Machines Corp. 1993,1996
All Rights Reserved
Licensed Materials - Property of IBM
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

create table employee(empid integer, empname varchar(100))
Der SQL-Befehl wurde erfolgreich vorbereitet.

insert into employee(empid, empname) values(1, 'Adam')
Der SQL-Befehl ist fehlgeschlagen. Während der SQL-Verarbeitung wurde Folgendes zurückgegeben:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" ist ein nicht definierter Name.  SQLSTATE=42704

insert into employee(empid, empname) values(2, 'Atul')
Der SQL-Befehl ist fehlgeschlagen. Während der SQL-Verarbeitung wurde Folgendes zurückgegeben:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" ist ein nicht definierter Name.  SQLSTATE=42704

select empid, empname  from employee
Der SQL-Befehl ist fehlgeschlagen. Während der SQL-Verarbeitung wurde Folgendes zurückgegeben:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" ist ein nicht definierter Name.  SQLSTATE=42704

create table employee(empid integer, empname varchar(100))
Der SQL-Befehl wurde erfolgreich vorbereitet.

Im vorliegenden Beispiel wurden die beiden SQL-Anweisungen CREATE erfolgreich vorbereitet, die Tabelle EMPLOYEE wurde jedoch nicht in der Datenbank erstellt. Die Anweisungen INSERT und SELECT konnten nicht erfolgreich vorbereitet werden, da die Tabelle EMPLOYEE nicht in der Datenbank vorhanden war.


Feedback