db2cli - Commande DB2 interactive pour l'exécution des instructions SQL

La commande db2cli est une commande CLI interactive qui démarre l'environnement CLI (Call Level Interface) interactif pour la conception et le prototypage dans CLI. Elle peut exécuter ou valider les instructions SQL d'un fichier.

L'exécutable db2cli se trouve dans le sous-répertoire d'installation de DB2, sqllib/samples/cli/, situé dans le répertoire principal du propriétaire de l'instance de base de données. Si vous utilisez IBM® Data Server Driver for ODBC and CLI, l'exécutable db2cli se trouve dans le répertoire d'installation clidriver/bin.

Cette rubrique décrit uniquement la fonction pureQuery de la commande db2cli. La fonction pureQuery est fournie par l'option execsql de la commande. Pour plus d'informations sur la commande CLI, reportez-vous à la rubrique db2cli - DB2 interactive CLI command dans le centre de documentation de DB2 for Linux, UNIX et Windows.

Autorisation

Aucune

Connexion requise

Aucune

Syntaxe de la commande

Lire le diagrammeSauter le diagramme
>>-db2cli--+-| execsql-mode |-+--------------------------------><
           '- -help-----------'   

execsql-mode

           (1)  .- -execute-----.                             
|--execsql------+---------------+--+-| server-option |----+----->
                '- -prepareonly-'  '- -connstring--chaîne-'   

>-- -inputsql--fichier_sql--+---------------------------+------->
                            '- -outfile--fichier_sortie-'   

>--+----------------------------------+------------------------->
   '- -statementdelimiter--délimiteur-'   

>--+----------------------------------------+------------------->
   '- -commentstart--indicateur_commentaire-'   

>--+---------------------------+-------------------------------->
   '- -cursorhold--holdability-'   

>--+---------------------------------------+-------------------->
   '- -cursorconcurrency--accès_concurrent-'   

>--+--------------------+--+--------+---------------------------|
   '- -cursortype--type-'  '- -help-'   

server-option

|-- -dsn--nom-dsn--+--------------------+-----------------------|
                   '-| authentication |-'   

authentication

|-- -user-- -nom_utilisateur--+------------------------+--------|
                              '- -passwd -mot_de_passe-'   

Remarques:
  1. Aucune des options execsql-mode ne fait de distinction entre les majuscules et les minuscules et elles peuvent être indiquées dans n'importe quel ordre.

Pour comprendre les conventions utilisées dans le diagramme, voir Comment lire les diagrammes de syntaxe.

Descriptions des options

Les options suivantes sont les options pureQuery-specific de la commande db2cli.

-cursorconcurrency accès_concurrent
Indique l'accès concurrent du curseur à appliquer à toutes les instructions. Utilisez l'une des valeurs suivantes pour accès_concurrent :
readonly
Définit l'accès concurrent du curseur en lecture seule. readonly est la valeur par défaut.
lock
Le curseur utilise le niveau de verrouillage le plus faible mais ce niveau est suffisant pour permettre la mise à jour de la ligne. La valeur est prise en charge par les curseurs forward-only et keyset.
values
Le curseur utilise le contrôle d'accès concurrents optimiste en comparant les valeurs.
-cursorhold holdability
Indique la fonction holdability du curseur à appliquer à toutes les instructions. Utilisez l'une des valeurs suivantes pour holdability :
yes
Les curseurs ne sont pas supprimés lorsque la transaction est validée.
no
Les curseurs sont supprimés lorsque la transaction est validée.

La valeur par défaut est yes.

-cursortype type
Indique le type de curseur autorisé. Utilisez l'une des valeurs suivantes pour type :
dynamic
Curseur flottant dynamique qui détecte les insertions, les suppressions et les mises à jour apportées à l'ensemble de résultats et qui effectue les modifications correspondantes dans l'ensemble de résultats. Les curseurs dynamiques sont pris en charge uniquement lorsque vous accédez à des serveurs de données DB2 for z/OS version 8.1 et suivante.
forwardonly
Le curseur défile uniquement en avant. forwardonly est le type par défaut.
keyset
Curseur de jeu de clés avec défilement qui peut détecter et modifier les données sous-jacentes.
static
Les données de l'ensemble de résultats sont statiques.

Remarques sur l'utilisation

Seuls des instructions SQL et des commentaires peuvent figurer dans le fichier SQL d'entrée. Le fichier ne doit pas inclure d'attributs ou de mots clés propres à l'environnement CLI.

Seules les instructions SQL qui peuvent être préparées sont autorisées dans le fichier SQL d'entrée. Les commandes DB2, telles que DESCRIBE TABLE et BIND, ne sont pas admises.

Si des instructions SQL du fichier dépendent d'instructions DDL dans le fichier d'entrée, vous devez exécuter toutes les instructions DDL avant d'exécuter la commande db2cli execsql -prepareonly.

Lorsque vous utilisez l'option -execute avec la commande db2cli execsql, les instructions SQL ne doivent pas avoir de marqueurs de paramètre.

Les instructions SQL par lot ne sont pas prises en charge.

Les instructions SQL sont exécutées avec l'API CLI DB2 SQLExecDirect(). Lorsque la commande db2cli exécute des instructions SQL dans une base de données, elle reconnaît les paramètres indiqués dans le fichier db2cli.ini ou db2dsdriver.cfg défini pour la base de données.

La chaîne du message d'erreur renvoyée par la commande db2cli est la chaîne renvoyée par l'API de traitement des erreurs CLI SQLError() ou SQLGetDiagRec().

Exemples

L'exemple suivant suppose que la table et les procédures ci-après sont créées dans la base de données SAMPLE :
  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

L'exemple suppose également que le fichier SQL test.sql contient le texte suivant :

--Insertion de données dans la table( employee )
insert into employee(empid, empname) values(1, 'Adam')
insert into employee(empid, empname) values(2, 'Atul')
select empid, empname  from employee

--Exécution de la procédure mémorisée
Call proc1( )

Vous entrez la commande db2cli suivante dans une fenêtre de la console pour exécuter les instructions SQL du fichier :

db2cli execsql –dsn sample –inputsql test.sql

Le texte suivant s'affiche dans la fenêtre de la console :

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')
The SQL command completed successfully.

insert into employee(empid, empname) values(2, 'Atul')
The SQL command completed successfully.

select empid, empname  from employee

EMPID EMPNAME
1, Adam
2, Atul

Call proc1()

EMPID EMPNAME
1, Adam
2, Atul

Vous pouvez exécuter une instruction CALL pour une procédure mémorisée incluant des arguments OUT. Le point d'interrogation (?) peut être utilisé en tant que paramètre OUT.

L'exemple suivant suppose que le fichier script SQL test2.sql contient le texte suivant :

CALL PROC2( 1, ?)

Vous entrez la commande db2cli suivante dans une fenêtre de la console pour exécuter les instructions SQL du fichier :

db2cli execsql –dsn sample –inputsql test2.sql 

Le texte suivant s'affiche dans la fenêtre de la console :

Value of output parameters
--------------------------
Parameter Name  : NAME
Parameter Value : -

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

Indiquez l'option -prepareonly pour préparer les instructions SQL sans les exécuter. Les instructions DDL nécessaires aux instructions SQL doivent être exécutées avant la commande db2cli execsql associée à l'option -prepareonly.

L'exemple suivant suppose que le fichier script SQL test3.sql contient le texte suivant :

--Insertion des données dans la table( employee )
insert into employee(empid, empname) values(1, 'Adam');
insert into employee(empid, empname) values(2, 'Atul');
select empid, empname  from employee;

On suppose également que la table EMPLOYEE a été créée dans la base de données.

Vous entrez la commande db2cli suivante dans une fenêtre de la console pour préparer les instructions SQL dans le fichier :

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

Le texte suivant s'affiche dans la fenêtre de la console :

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')
The SQL command prepared successfully.

insert into employee(empid, empname) values(2, 'Atul')
The SQL command prepared successfully.

select empid, empname  from employee
The SQL command prepared successfully.

Si vous placez des instructions DDL nécessaires aux instructions DML dans le même fichier, les instructions DML nécessaires aux instructions DDL échouent. Par exemple, supposons que le texte suivant se trouve dans le fichier test4.sql et que la table EMPLOYEE n'a pas été créée dans la base de données :

--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;

-- Tentative de création d'une autre table portant le même nom
create table employee(empid integer, empname varchar(100));

L'instruction CREATE TABLE doit être exécutée avant l'exécution des instructions INSERT et SELECT.

Vous entrez la commande db2cli suivante dans une fenêtre de la console pour préparer les instructions SQL du fichier :

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

Le texte suivant s'affiche dans la fenêtre de la console :

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))
The SQL command prepared successfully.

insert into employee(empid, empname) values(1, 'Adam')
The SQL command failed. During SQL processing it returned:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" is an undefined name.  SQLSTATE=42704

insert into employee(empid, empname) values(2, 'Atul')
The SQL command failed. During SQL processing it returned:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" is an undefined name.  SQLSTATE=42704

select empid, empname  from employee
The SQL command failed. During SQL processing it returned:
[IBM][CLI Driver][DB2/6000] SQL0204N  "EMPLOYEE" is an undefined name.  SQLSTATE=42704

create table employee(empid integer, empname varchar(100))
The SQL command prepared successfully.

Dans cet exemple, les deux instructions SQL CREATE ont été correctement préparées mais la table EMPLOYEE n'a pas été créée dans la base de données. Les instructions INSERT et SELECT n'ont pas été préparées correctement car la table EMPLOYEE ne se trouve pas dans la base de données.


Commentaires