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-'
다이어그램에서 사용되는 규칙을 이해하려면 구문 다이어그램 읽는 방법을 참조하십시오.
출력을 파일에 저장하려면 파일의 절대 경로 또는 상대 경로에 -output 옵션을 지정하십시오.
명령이 여러 라인에 있으면 각 라인을 commentindicator 문자 조합으로 시작하십시오.
주석행의 최대 길이는 128자입니다.
입력 SQL 파일에서 주석 문자 뒤의 텍스트는 명령문 커서 속성을 포함할 수 있습니다. 커서 속성은 주석 바로 뒤의 SQL문에 적용됩니다.
기본값은 yes입니다.
파일에서 SQL문은 분리문자로 구분됩니다. 명령문은 준비 가능(preparable) 명령문만 가능합니다.
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()에서 리턴하는 문자열입니다.
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문이 준비되지 않았습니다.