2010년 8월 4일 수요일

Argument 있는 Retrieve의 조회후 dw의 쿼리 보기

 

보통 실행되는 sql을 미리보려면

sqlpreview event 의 sqlsyntax 나 GetSqlSelect() 함수를 이용하는데

이때 Argument 값은 :argument 형식으로 보여지게 되어

실제 어떤 값이 적용 됐는지 알기 힘든경우가 있습니다.

 

Debug를 돌리다보면 Argument 값에 실제 값을 볼수 있는데 Debug가

프로그램 실행시에 봐야 하는경우도 있겠지요.

 

방법은 이렇습니다.

우선 DBprofile 에서 Edit 를 누르시면 생성한 DBprofile의 여러가지 설정을

하시는 화면이 뜨는데요.

1. DBprofile 에서 Edit 선택.

2. Tansaction 탭을 선택.

3. Disable Bind 체크.

4. Prieview 탭선택

5. Prieview 내용중 SQLCA.DBParm = "DisableBind=1" 부분을 복사

6. Application 이나 기타 DB연결 정보 적으신곳에 붙여 넣습니다.

ORACLE은 이렇고요

 

MS-SQL의 경우 Disable Bind 체크를 해도 SQLCA.DBParm 이부분에 DisableBind=1 이 나타나지 않습니다.

거꾸로 체크를 하지 않으면 DisableBind = 0 이라고 나타나지요...

MS-SQL은 DisableBind=1 이부분을 복사하지 않으셔도 체크만 하시면 됩니다.

(ADO.NET의 경우만 확인했습니다. ODBC나 OLE는 확인 하지 못했습니다.)

 

ORACLE은 DBprofile 설정시 Disable Bind 가 기본적으로 체크되어 있지 않은것 같구요

MS-SQL은 기본적으로 체크가 되어있는거 같습니다. 

(이부분은 따로 확인해보진 않았지만 DisableBind 부분을 건드린 기억이 없기에 말씀 드린것입니다.)

 

보태기 :

만약 저 내용을(Argument에 실제로 들어간 값을) GetItem....()으로 구해 와야 하는경우가 있다면

select col_1

,        col_2

,        :argument_1 /*compute column으로 생성*/

from   table_1

where pk_01 =  :argument_1

과 같은 식으로 하시면

,        :argument_1 /*compute column으로 생성*/ 

부분이 dwo 상에 compute column으로 생성 됩니다.


ex ) 스크립트 (dw.sqlpreview 이벤트)

if keydown(keyshift!) and keydown(keycontrol!) then
 FileOpen('.\temp_sql_' + this.classname() + '.txt',StreamMode!,Write!,LockWrite!,Replace!)
 long  ll_i
 
 FileWrite(1, '/*########## ' + this.classname() + ' = "' + this.dataobject + '" ##########*/~r~n~r~n~r~n')
 
 for ll_i = 1 to len(sqlsyntax) step 32765
  FileWrite(1, mid(sqlsyntax, ll_i, 32765))
 next
 FileClose(1)
 Run("notepad .\temp_sql_" + this.classname() + ".txt")
end if

 

/*

이 문장을 Datawindow 의  sqlpreview 이벤트에 넣어서 사용하고 있습니다.

dw는 유저오브젝트를 사용하는 경우가 많을 건데... 거기다 넣으면 훨씬 좋겠지요.

시프트키와 콘트롤키를 누르고 조회를 하면 실행되는 dw의 sql명령이 아규먼트의 값도 치환되어서

노트패드로 뜨기때문에 오류 검색을 쉽게 할 수 있습니다.

일반적으로 조회할때는 안 뜨고... 개발자가 필요할때만 SQL문장을 확인 할 수 있는 거죠..  */

댓글 없음:

댓글 쓰기