db2cli - DB2 대화식 CLI 명령으로 SQL문 실행

db2cli 명령은 CLI(Call Level Interface)에서 설계 및 프로토타입을 위한 대화식 CLI 환경을 시작하는 대화식 CLI 명령입니다. db2cli 명령은 파일에 있는 SQL문을 실행하거나 유효성을 확인합니다.

db2cli 실행 파일은 데이터베이스 인스턴스 소유자 홈 디렉토리의 sqllib/samples/cli/ DB2® 설치 서브디렉토리에 있습니다. IBM® Data Server Driver for ODBC and CLI의 경우, db2cli 실행 파일이 clidriver/bin 설치 디렉토리에 있습니다.

이 주제에서는 db2cli 명령의 pureQuery 기능에 대해서만 설명합니다. pureQuery 기능은 명령의 execsql 옵션이 제공합니다. CLI 명령 정보는 Linux, UNIX 및 Windows용 DB2 정보 센터에서 db2cli - DB2 대화식 CLI 명령을 참조하십시오.

이 주제에는 다음과 같은 섹션이 있습니다.

권한 부여

없음

필수 연결

없음

명령 구문

구문 도표 읽기시각적 구문 도표 생략
>>-db2cli--+-| execsql-mode |-+--------------------------------><
           '- -help-----------'   

execsql-mode

           (1)  .- -execute-----.                          
|--execsql------+---------------+--+-| server-option |-+-------->
                '- -prepareonly-'  '- -connstring--str-'   

>-- -inputsql--sqlfile--+-----------------------+--------------->
                        '- -outfile--outputfile-'   

>--+---------------------------------+-------------------------->
   '- -statementdelimiter--delimiter-'   

>--+----------------------------------+------------------------->
   '- -commentstart--commentindicator-'   

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

>--+----------------------------------+------------------------->
   '- -cursorconcurrency--concurrency-'   

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

server-option

|-- -dsn--dsn_name--+--------------------+----------------------|
                    '-| authentication |-'   

authentication

|-- -user-- -username--+--------------------+-------------------|
                       '- -passwd -password-'   

주:
  1. 모든 execsql-mode 옵션은 대소문자를 구분하지 않고 순서에 상관없이 옵션을 지정할 수 있습니다.

다이어그램에서 사용되는 규칙을 이해하려면 구문 다이어그램 읽는 방법을 참조하십시오.

옵션에 대한 설명

다음 옵션은 db2cli 명령의 pureQuery 특정 옵션입니다.

-cursorconcurrency concurrency
모든 명령문에 적용되는 커서 동시성을 지정합니다. concurrency에 대해 다음 값 중 하나를 사용하십시오.
readonly
커서 동시성을 읽기 전용으로 설정합니다. readonly가 기본값입니다.
lock
커서는 행이 업데이트 가능하도록 가장 낮은 잠금 레벨을 사용합니다. 이 값은 순방향 전용의 키 세트 커서에서 지원됩니다.
values
커서가 낙관적 동시처리 제어를 사용하고 값을 비교합니다.
-cursorhold holdability
모든 명령문에 적용되는 커서 유지 가능성을 지정합니다. holdability에 대해 다음 값 중 하나를 사용하십시오.
yes
트랜잭션을 커미트할 때 커서가 파괴되지 않습니다.
no
트랜잭션을 커미트할 때 커서가 파괴됩니다.

기본값은 yes입니다.

-cursortype type
허용되는 커서 유형을 지정합니다. type에 대해 다음 값 중 하나를 사용하십시오.
dynamic
결과 세트에 대한 삽입, 삭제 및 업데이트를 감지하고 이에 맞게 결과 세트를 변경하는 동적 스크롤 가능 커서입니다. 동적 커서는 z/OS®용 DB2 버전 8.1 및 그 이상 데이터 서버에 액세스할 경우에만 지원됩니다.
forwardonly
커서가 순방향만 지원합니다. forwardonly가 기본 유형입니다.
keyset
기본 데이터를 감지하고 변경할 수 있는 키 세트 기반 스크롤 가능 커서입니다.
static
결과 세트의 데이터가 정적입니다.

사용 참고사항

SQL문과 주석만 입력 SQL 파일에 있을 수 있습니다. CLI 고유 속성이나 키워드는 이 파일에 포함할 수 없습니다.

준비 가능 SQL문만 입력 SQL 파일에 허용됩니다. DESCRIBE TABLE 및 BIND 같은 DB2 명령은 허용되지 않습니다.

파일의 SQL문이 입력 파일의 DDL에 종속되면 db2cli execsql -prepareonly 명령을 실행하기 전에 모든 DDL문을 실행해야 합니다.

db2cli execsql 명령에 -execute 옵션을 사용할 때는 SQL문에 매개변수 표시문자를 포함할 수 없습니다.

일괄처리 SQL문은 지원되지 않습니다.

SQL문은 DB2 CLI API SQLExecDirect()를 사용하여 실행합니다. db2cli 명령이 데이터베이스에 SQL문을 실행하면 데이터베이스에 대한 db2cli.ini 또는 db2dsdriver.cfg 세트에 지정된 설정을 인식합니다.

db2cli 명령이 리턴하는 오류 메시지 문자열은 CLI 오류 조절 API SQLError() 또는 SQLGetDiagRec()에서 리턴하는 문자열입니다.

예제

다음 예제에서는 다음 테이블 및 프로시저가 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

또한 SQL 파일 test.sql에 다음 텍스트가 있다고 가정합니다.

--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( )

파일의 SQL문을 실행하려면 다음 db2cli 명령을 콘솔 창에 입력합니다.

db2cli execsql –dsn sample –inputsql test.sql

다음 텍스트가 콘솔 창에 표시됩니다.

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

스토어드 프로시저에 대해 OUT 인수가 있는 CALL문을 실행할 수 있습니다. 물음표(?)를 OUT 매개변수로 사용합니다.

다음 예제에서는 SQL 스크립트 파일 test2.sql에 다음 텍스트가 있다고 가정합니다.

CALL PROC2( 1, ?)

파일의 SQL문을 실행하려면 다음 db2cli 명령을 콘솔 창에 입력합니다.

db2cli execsql –dsn sample –inputsql test2.sql 

다음 텍스트가 콘솔 창에 표시됩니다.

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

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

SQL문을 실행하지 않고 준비하려면 -prepareonly 옵션을 지정하십시오. SQL문에 필요한 DDL문은 -prepareonly 옵션을 지정한 db2cli execsql 명령을 실행하기 전에 실행해야 합니다.

다음 예제에서는 SQL 파일 test3.sql에 다음 텍스트가 있다고 가정합니다.

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

또한 EMPLOYEE 테이블이 데이터베이스에 작성되었다고 가정하십시오.

파일의 SQL문을 준비하려면 다음 db2cli 명령을 콘솔 창에 입력합니다.

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

다음 텍스트가 콘솔 창에 표시됩니다.

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.

DML문에 필요한 DDL문을 동일한 파일에 배치하면 DDL문이 필요한 DML문이 실패합니다. 예를 들어, 다음 텍스트가 test4.sql 파일에 있고 EMPLOYEE 테이블이 데이터베이스에 작성되지 않았다고 가정하십시오.

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

CREATE TABLE문은 INSERT 및 SELECT문을 성공적으로 실행하기 전에 실행해야 합니다.

파일의 SQL문을 준비하려면 다음 db2cli 명령을 콘솔 창에 입력합니다.

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

다음 텍스트가 콘솔 창에 표시됩니다.

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.

이 예제에서 두 개의 CREATE SQL문이 준비되었지만 EMPLOYEE 테이블이 데이터베이스에 작성되지 않았습니다. EMPLOYEE 테이블이 데이터베이스에 없으므로 INSERT 및 SELECT문이 준비되지 않았습니다.


피드백