>>김동철 님께서 쓰시길<<
:: memset(sqlCmd,0x00,sizeof(sqlCmd));
:: sprintf(sqlCmd,"SELECT ScnUserCnt, ScnTotalCnt FROM SYSCOUNT");
:: EXEC SQL PREPARE SQL_SYSCOUNT FROM :sqlCmd;
:: EXEC SQL DECLARE CUR_SYSCOUNT CURSOR FOR SQL_SYSCOUNT;
:: EXEC SQL OPEN CUR_SYSCOUNT;
:: EXEC SQL FETCH CUR_SYSCOUNT
:: INTO :maxLstCnt,:maxLstCntTmp;
::
:: /*
:: EXEC SQL SELECT ScnUserCnt INTO :maxLstCnt FROM SYSCOUNT WHERE ScnSysId = 1;
:: EXEC SQL SELECT ScnTotalCnt INTO :maxLstCntTmp FROM SYSCOUNT WHERE ScnSysId = 1;
:: */
::
:: 둘 다 똑 같은 역활을 하는 Pro*c 문장입니다. 근데요.. 제가 발견한 것인데...
:: 두 개의 정수값을 가지고 오는 둘은 차이점을 보입니다.
:: 원래 1 , 1 이렇게 가지고 와야하는데 주석처리된 문장은 1234, 1 이렇게
:: 가지고 옵니다. 저도 나름 되로 생각해보았습니다. 결론은 모르겠다입니다.
:: 이 둘의 차이점을 아시는 분은 답변해주십시오... 제발... 부탁드립니다..꾸벅~~~
::
:: 커서를 열고 데이터를 가지고 오는 것이 정석인가요.... 아님 밑에 처럼 데이터를
:: 가지고 오는 것이 좋은 방법인가요......... 미치기 일보 직전입니다.
:: 가르쳐주세엽.........
저도 프로그램을 많이 짜보지 않아서, 그리고 이 예문이 전체가 아니어서
정확한 판단은 못하겠습니다만...
1. 변수는 항상 초기화를 하여야 합니다. --> :maxLstCnt,:maxLstCntTmp
그리고 커서는 반드시 close 하여야 합니다.
또한 DB를 access 할 때마다 반드시 error를 조사해야 합니다.
2. 오라클7에서 Dynamic SQL은 4가지 방법이 있습니다.
method1, ... , method4 가 있고 번호가 놓을수록 어려워지죠.
여기서는 간단하게 입력변수가 없고, 출력변수만 있으면 되니 굳이
어려운 방법을 사용할 필요는 없지요.
단지 WHERE 조건절에서 위의 예문처럼 WHERE ScnSysId = 1 있을때
1 대신에 바인드 변수를 사용하면 오라클 DBMS의 성능이 좋아진다는
점입니다.
그리고 커서는 여러개의 row를 처리할 때만 반드시 사용하면 되고,
위의 경우처럼 1개의 row를 다루는 경우는 프로그래머의 취향에 따라서 ...
하지만 프로그램을 간결하게 짠 경우 유지보수도 쉽겠지요.
다른 분들의 의향은 어떤가요?
|