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.
Keine
Keine
>>-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-'
Eine Beschreibung der in diesem Diagramm verwendeten Konventionen finden Sie in Informationen zum Lesen von Syntaxdiagrammen.
Die folgenden Optionen sind die für pureQuery spezifischen Optionen für den Befehl db2cli.
Der Standardwert ist yes.
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.
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.