예를 들어, 응용프로그램은 구문적으로 동일하지만 양식 필드에서 사용자가 제공하는 리터럴 값을 포함하는 INSERT문을 생성할 수 있습니다.
SQL문을 캡처하기 전에 클라이언트 최적화 등록 정보를 설정하는 경우 다음 예와 같이 등록 정보 sqlLiteralSubstitution을 ENABLE로 설정하십시오.
pdqProperties=captureMode (ON), pureQueryXml (C:/workspace/capture_file.pdqxml), sqlLiteralSubstitution (ENABLE)
응용프로그램이 다음 예의 첫 번째 명령문과 유사한 INSERT문을 실행하는 경우, pureQuery는 두 번째 명령문의 양식으로 이 명령문을 캡처합니다.
insert into EMPLOYEES/*inserting new row into EMPLOYEES table*/values('Dong','Margaret',NULL,60000,12) insert into EMPLOYEES values(?,?,?,?,?)
응용프로그램을 실행하기 전에, capturedOnly 등록 정보의 값을 TRUE로 설정하고 ENABLE로 설정된 sqlLiteralSubstitution을 보존하십시오. 사용자가 응용프로그램을 실행하고 응용프로그램이 insert into autoGeneratedKy(name, salary, deptno) values('ABC', 50000, 11 ) 명령문을 실행하는 경우, pureQuery는 명령문을 pureQueryXML 파일에 있는 매개변수화된 버전에 일치시켜서 실행합니다.
그러나 capture_file.pdqxml에 있는 매개변수화된 명령문과는 SQL문을 일치시키지 않도록 pureQuery에 지시할 수 있습니다. 응용프로그램을 실행하기 전에 sqlLiteralSubstitution을 DISABLE로 설정하십시오. 사용자가 응용프로그램을 실행하고 응용프로그램이 이전 단락에서 INSERT문을 발행하는 경우, pureQuery의 명령문 실행 여부는 capturedOnly 등록 정보의 값에 따라 결정됩니다.
다음 테이블은 sqlLiteralSubstitution 등록 정보의 값과 효과를 나열합니다. 테이블은 또한 이 등록 정보의 값을 설정하지 않을 경우 발생하는 사항도 보여줍니다.
값 | 처음 명령문을 캡처하는 경우의 효과 | 점차적으로 캡처하는 경우의 효과 | 응용프로그램을 실행하는 경우의 효과 |
---|---|---|---|
ENABLE | pureQuery는 리터럴 값을 매개변수 표시문자로
교체합니다. pureQuery는 또한 원래 SQL문에 대한 스택 추적도 캡처합니다. pureQuery가 모든 원래 SQL문의 스택 추적을 캡처하도록 하려면, maxStackTracesCaptured 등록 정보의 값을 증가시켜야 할 수도 있습니다. pureQuery는 maxNonParmSQL 등록 정보의 값에 대해 원래 SQL문을 계산하지 않습니다. pureQuery가 SQL문을 매개변수화할 수 없는 경우 경고 메시지를 로깅합니다. |
효과는 SQL문을 처음 캡처하는 경우와 동일합니다. | pureQuery는 SQL문을 pureQueryXML 파일에 있는 매개변수화된 SQL문과 일치시키려고 합니다. |
DISABLE | pureQuery는 리터럴 값을 매개변수 표시문자로 교체하지 않습니다. | pureQuery는 리터럴 값을 매개변수 표시문자로 교체하지 않습니다. | pureQuery는 SQL문을 pureQueryXML 파일에 있는 매개변수화된 SQL문과 일치시키지 않습니다. |
NOT_SET(또는 지정 안함) | pureQuery는 리터럴 값을 매개변수 표시문자로 교체하지 않습니다. | pureQuery가 지정된
pureQueryXML 파일에서 명령문을 마지막으로 캡처할 때 값이 ENABLE인 경우,
pureQuery는 리터럴 값을 매개변수 표시문자로 교체합니다. 값이 DISABLE인 경우, pureQuery는 리터럴 값을 매개변수 표시문자로 교체하지 않습니다. |
pureQuery가 지정된
pureQueryXML 파일에서 명령문을 마지막으로 캡처할 때 값이 ENABLE인 경우,
pureQuery는 SQL문을 pureQueryXML 파일의 매개변수화된 SQL문과 일치시키려고
합니다. 값이 DISABLE인 경우 pureQuery는 SQL문을 pureQueryXML 파일의 매개변수화된 SQL문과 일치시키지 않습니다. |
버전 2.2.0.1부터는, pureQuery가 리터럴 값을 매개변수 표시문자로 대체할 때 두 가지 유형의 캐스팅을 지원합니다.
예를 들어, 명령문에 WHERE mySMALLINTcolumn=CAST(32767999 as INTEGER) 절이 있는 경우 값 32767999는 명령문 캡처 시 매개변수 표시문자가 됩니다.
또 다른 예로, CAST(6 as DECIMAL(3,3)) CAST 함수를 사용하는 경우 6만 명령문 캡처 시 매개변수 표시문자가 됩니다.
이름이 CAST인 사용자 정의 외부 스칼라 함수는 지원되지 않습니다.
데이터베이스 클라이언트에 대해 변환이 발생할 수 있으므로, 내재된 캐스팅을 지원하지 않은 데이터베이스 관리 시스템에 대해 이와 같은 SQL문을 실행할 수 있습니다.
pureQuery는 다음 유형의 내재된 캐스팅을 지원합니다.
select DEPTNAME from DEPARTMENT WHERE DEPTNO = '1' select DEPTNAME from DEPARTMENT WHERE DEPTNO BETWEEN '20' AND '30'
select DEPTNO from DEPARTMENT WHERE DEPTNAME = 123456
INSERT INTO DEPARTMENT VALUES(1,5,56,'000010','A00','aa','2008-09-09')
insert into sales values (5, ?, 9);