아래와 같은 에러가 발생하는데 고수님들의 조언을 부탁드립니다.
[IBM][CLI Driver][DB2/AIX64] SQL7032N SQL 프로시저 "USP_FP_DSUM"이(가) 작성되지 않았습니다. 진단 파일은 "P5085795.log"입니다. SQLSTATE=42904
DB2 레지스트리 변수 1. DB2_SQLROUTINE_COMPILER_PATH가 C 컴파일러 환경을 설정하는 스크립트 또는 일괄처리 파일을 가리키도록 설정되어 있는지 확인하십시오
db2set "DB2_SQLROUTINE_COMPILE_COMMAND=xlc -H512 -T512 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2"
db2를 restart하신후..
2. $HOME/sqllib/function/routine아래의 path로 이동하여 sr_cpath파일을 수정한다.
#!/bin/sh
PATH=$PATH:/usr/vac/bin
#PATH=$PATH:/usr/ibmcxx/bin
#PATH=$PATH:/usr/lpp/xlC/bin
export PATH
에서 xlc가 실핼가능한 디렉토리 path를 지정한다. 여기서는 /usr/vac/bin아래에 xlc가 있습니다..
위의 SP환경을 설정한 후 다시 해보세요.. ^^
감사합니다.
덕분에 환경설정은 되었는데요...
스토어드 프로시져가 생성이 되었습니다.
몇가지 질문을 더 드립니다.
환경은
O/S : AIX
DB : DB2 V8.1 입니다.
프로시져의 내용은 조건에 맞는 테이블에서 데이터를 쿼리하여
또 다른 테이블에 INSERT하는 간단한 프로시져입니다.
1. 생성된 프로시져를 어떻게 실행을 하나요..?
오라클에서는 SQL>EXEC 프로시져명
하면 되었는데....
2. 궁극적으로는 프로시져가 매일 또는 매시간 자동으로
실행이 되어야합니다
DB2에서 지원하는 스케줄링이 있는지... 있으면 어떻게 사용하는것 인지.. 없다면 CRON에 등록되어야 하는지...Shell 스크립트를 부탁드립니다.
1.번에 대해서는 아시는데로,
[sqc]
EXEC SQL
CALL SP명 : SP(파라미터가 없는 것은 그냥 SP명만, 특정 파라미터에 값을 넘기지 않을때는 null로 적어주시면 됩니다
[shell]
db2 connect to dbname
db2 "call sp명"
으로 호출하시면 됩니다.
2.번은 crontab을 편집해서 등록하셔할 듯 싶습니다.
배성수(Ultrazacos)님께 감사의 말씀을 드립니다.
프로시져를 PC에 있는 DB2 명령행처리기에서 실행하면 아래와 같이
정상적으로 처리가 됩니다.
db2 => CONNECT TO TEC USER tec USING tec
데이터베이스 연결 정보
데이터베이스 서버 = DB2/AIX64 8.1.5 SQL 권한 부여 ID = TEC 로컬 데이터베이스 별명 = TEC
db2 =>db2 => call usp_perf_hsum
리턴 상태 = 0
하지만 telnet으로 AIX 유닉스에 연결하여 실행하면 아래와 같이 실행은 하되
처리할 데이터가 없거나, 빈테이블이란 메세지가 나옵니다.
(처리할 데이터는 있습니다.)
dmssms:/usr/Tivoli/works/report>usp_perf_hsum.sh
Database Connection Information
Database server = DB2/AIX64 8.1.5 SQL authorization ID = TEC Local database alias = TEC
Return Status = 0
SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000
아무래도 클라이언트에서 연결하여 처리하는것과
서버에서 직접 처리하는것에 차이가 있는것 같습니다.
해결책을 부탁드립니다.
일단 서버에 직접접속해서 처리한 결과와 클라이언트에서 sp call하는 것과의 처리결과는 다를 수가 없습니다.
왜냐면 서버에 접속하는 점은 둘다 동일하기 때문입니다.
님께서 질문하신 내용중에
"프로시져의 내용은 조건에 맞는 테이블에서 데이터를 쿼리하여
또 다른 테이블에 INSERT하는 간단한 프로시져입니다 "
밑줄내용에 치중하셔서 Debugging해야 될 듯 싶은 감이 옵니다.
쿼리를 집적하셔서 결과가 나오는지.. 또 sp를 call할때는
결과가 원래 나올수 없는 param을 넘기셨는지 확인해 보시기 바랍니다.