formatsql: 단일 SQL문 포맷팅 및 어노테이션 작성

formatsql API에 SQL문을 전달하면 사용자가 보다 쉽게 읽을 수 있도록 API는 포맷팅된 SQL문을 리턴합니다. formatsql API는 통계를 사용하여 명령문에 어노테이션도 작성할 수 있습니다.

API를 호출하기 전에 IBM® Data Studio 클라이언트를 통해 SQL문을 캡처하지 않아도 됩니다.

입력 매개변수

URL을 사용하여 API에 다음 키 및 값 쌍을 전달하십시오. https://localhost/tuning/formatsql

표 1. 입력 매개변수
가능한 값 기본값
dbType 데이터 서버 유형 ZOS  
dbHost 데이터 서버의 호스트입니다. 도메인 이름 또는 IP 주소  
dbPort 데이터 서버의 포트 번호    
dbName 데이터 서버 이름    
dbUser 데이터 서버에 연결할 때 사용할 ID입니다.    
dbPassword 데이터 서버에 연결할 때 사용할 비밀번호입니다.    
sql SQL문의 텍스트입니다.    
showAnnotation 통계를 사용하여 SQL문에 어노테이션을 작성할지 여부를 판별합니다. 이 매개변수를 포함시키는 경우, API는 포맷팅되고 어노테이션이 있는 SQL문을 리턴하기 전에 SQL문을 Explain합니다. false, true true
schema SQL문에 규정되지 않은 오브젝트에 사용할 EXPLAIN 프로세스의 스키마입니다. 이 값은 tuning_service.properties 파일에 설정된 값을 겹쳐씁니다.    
sqlid CURRENT SQLID 특수 레지스터 값을 설정합니다.   값을 지정하지 않는 경우, 튜닝 서비스는 서브시스템 연결에 대해 지정된 권한 부여 ID를 사용합니다.

출력 매개변수

API는 다음 키 및 값 쌍을 리턴합니다.

표 2. 출력 매개변수
code 웹 API의 리턴 코드입니다.
0
경고 없이 완료됨
4
완료되었지만 경고가 표시됨
8
오류로 인해 완료되지 않고 종료됨
output 어노테이션이 있거나 없는 포맷팅된 SQL문입니다.
message 오류 또는 경고 메시지입니다.
exception 예외가 발생한 경우 예외에 대한 정보입니다. IBM 지원 센터와 작업하여 문제점을 해결하는 경우 이 정보는 IBM 지원 센터에 유용합니다.

예제 1

이 예제에서는 cURL을 사용하여 formatsql API에 SQL문을 전달하며, 이 API는 포맷팅되고 통계를 사용하여 어노테이션이 작성된 명령문을 리턴합니다.

입력
curl 
--insecure 
-X POST 
-H "Content-Type: application/json; charset=UTF-8"
--data "{ 
   dbType:ZOS, 
   dbHost:host, 
   dbPort:port_number, 
   dbName:subsystem, 
   dbUser:user_ID, 
   dbPassword:password, 
   sql:\"SELECT N_NAME FROM NATION WHERE N_NATIONKEY < 10\" 
   }"
https://localhost/tuning/formatsql
출력
{ 
"code":0, 
"message":"SELECT authorization_ID.NATION.N_NAME\n
      FROM authorization_ID.NATION  --CARDF=25  --QUALIFIED_ROWS=11 
            --NPAGESF=0\n
      WHERE authorization_ID.NATION.N_NATIONKEY < 10  --COLCARDF=25 
            --MAX_FREQ=(missing) --FF=0.44" 
}

예제 2

이 예제에서는 cURL을 사용하여 showAnnotation이 "false"로 설정된 formatsql API에 SQL문을 전달합니다. 그러나 user_ID.NATION 테이블이 정의되지 않았기 때문에 오류가 있습니다.

입력
curl 
--insecure 
-X POST 
-H "Content-Type: application/json; charset=UTF-8"
--data "{  
   dbType:ZOS, 
   dbHost:host, 
   dbPort:port_number, 
   dbName:subsystem, 
   dbUser:user_ID, 
   dbPassword:password, 
   sql:\"SELECT N_NAME FROM NATION WHERE N_NATIONKEY < 10\",
   showAnnotation:false 
   }"
https://localhost/tuning/formatsql
출력
{ 
"code":8, 
"error":"The EXPLAIN statement failed. The following error was returned: 
   SQLCODE: -204, SQLSTATE: 42704.The SQL statement failed.", 
"exception":"com.ibm.datatools.dsoe.explain.zos.exception.ExplainException:
   com.ibm.datatools.dsoe.common.da.exception.OSCSQLException:
   com.ibm.db2.jcc.am.SqlSyntaxErrorException: user_ID.NATION IS 
      AN UNDEFINED NAME.
   SQLCODE=-204, SQLSTATE=42704, DRIVER=3.67.24..." 
}

피드백