database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1618 게시물 읽기
No. 1618
스토어드프로시저 빌드관련 문제
작성자
박경욱
작성일
2008-05-29 09:25
조회수
11,016

안녕하세요!


몇일 전 db서버 교체 작업이 있어서 db2 관련 자료(백업)를 새로운 서버에

리스토어 했습니다.(db2 버전은 8 입니다.)


그런데 프로시저 부분에서 문제가 생겼습니다.


1. 서버보기 탭에서 프로시저를 삭제하고 새로고침을 하면 또 나타 납니다.


2. 위 1번과 같은(연관이 있는) 문제로 빌드가 되지 않습니다.

   그래서 궁여지책으로 프로시저명을 바꿔서 빌드하고 소스에서(jsp) 그 바꾼 프로시저명을 Call 하도록 고쳤습니다.

   에러 내용은 아래와 같습니다.

   

MYDB.P_EXE_PRICE - 빌드가 시작되었습니다.

DROP SPECIFIC PROCEDURE MYDB.SQL030717012613684

MYDB.P_EXE_PRICE - 스토어드 프로시저 삭제 완료.

스토어드 프로시저 작성이 -454을(를) 리턴했습니다.

MYDB.P_EXE_PRICE: 572: [IBM][CLI Driver][DB2/NT] SQL0454N  루틴 "MYDB.P_EXE_PRICE"의 정의에 제공되는 서명이 유형 또는 스키마에 이미 존재하는 일부 다른 루틴의 서명과 일치합니다.  LINE NUMBER=572.  SQLSTATE=42723

MYDB.P_EXE_PRICE - 빌드 실패.

MYDB.P_EXE_PRICE - 롤백이 완료됨.


즉, 이렇게 해서 사용을 하고는 있는데(별 지장은 없는데) 소스가 지저분해지고,

또 삭제가 안되니 아무래도 개운치가 않아서 고수님들께 질문 드립니다.


감사합니다.

이 글에 대한 댓글이 총 11건 있습니다.

db2는 procedure 빌드에 replace기능이 없어서 동일한 이름으로 빌드를 하려면 기존에 생성된 sp를 drop해야 합니다. 동일한 이름의 sp도 파라메터를 다르게 주고 생성을 할 수 있는데 이때 구분이 되는 것이 SPECIFIC 입니다. 
sp를 삭제하는 방법은 2가지가 있습니다.  
1. drop prucedure procedure_name (동일한 이름의 sp가 있을경우 에러발생)
2. drop specific procedure specific_name 

삭제할 procedure와 specific를 조회하는 방법은 
db2 "select rtrim(procschema)||'.'||procname||' '||specificname from syscat.procedures where procschema not like 'SYS%' order by 1 "

소스는 TEXT 컬럼을 추가하셔서 확인을 하시면 됩니다. 
조는 냥이님이 2008-05-29 09:50에 작성한 댓글입니다. Edit

신속한 답변 감사합니다.
일러주신대로 작업 해 보겠습니다.
좋은 하루 보내세요!^^

박경욱님이 2008-05-29 11:12에 작성한 댓글입니다. Edit
drop specific procedure sql030717012613684

이 명령어로 실행을 했더니 아래와 같은 메세지가 나오면서 지원지지 않습니다.ㅠㅠ.

-------------------------------- 입력된 명령 --------------------------------
drop specific procedure sql030717012613684;
-----------------------------------------------------------------------------
drop specific procedure sql030717012613684

SQL0100W  FETCH, UPDATE 또는 DELETE에 대한 행이 없거나 쿼리 결과가 빈
테이블입니다.  SQLSTATE=02000

박경욱님이 2008-05-29 11:41에 작성한 댓글입니다. Edit

procedure의 schmea와 connect 한 user의 schema가 다르기 때문에 찾지 못하는거 같습니다. 
specific name 앞에 procshcme를 붙여보세요.

ex) drop specific procedure testuser.sql030717012613684
조는 냥이님이 2008-05-29 11:49에 작성한 댓글입니다. Edit
다음과 같이 schema를 주고도 해 봤는데
동일한 증상 입니다.(에러 메세지도 같음, 참고로 schema는 하나임.)

drop specific procedure testuser.SQL030717012613684

작업은 명령센터에서 했습니다.

박경욱님이 2008-05-29 12:47에 작성한 댓글입니다. Edit
db2 "select rtrim(procschema)||'.'||procname||' '||specificname from syscat.procedures where specificname like 'SQL0%' "

조회 한번 해주시겠어요?
조는 냥이님이 2008-05-29 13:02에 작성한 댓글입니다. Edit

조회 했더니 결과명들이 쭈욱 나오는 데(Procedure 수만큼)
그 중에서 지울 것은 아래 것입니다.

(그대로 복사한 것임)

ANAM.P_EXE_PRICE SQL030717012613684

위의 testuser schema는 dnjsfo ANAM 입니다.

박경욱님이 2008-05-29 13:17에 작성한 댓글입니다.
이 댓글은 2008-05-29 13:19에 마지막으로 수정되었습니다. Edit

drop specific procedure ANAM.SQL030717012613684

db2에서 말하는 스키마와 oracle에서 말하는 스키마는 좀 다름니다. 
db2 에서 말하는 스키마는 오라클의 owner로 보시면 됩니다.
조는 냥이님이 2008-05-29 13:20에 작성한 댓글입니다. Edit

죄송합니다.
제가 조는냥이님의 말씀을 잘 이해를 못하는 것 같기도 하고...

schema를 다른 이름으로 쓰면...

SQL0204N "ANAMDB.SQL030717012613684"은(는)
정의되지 않은 이름입니다.

라는 메세지가 나오는 걸 보니 schema는 정확한 것 같은데
역시 동일한 증상으로 안되는군요!

박경욱님이 2008-05-29 14:05에 작성한 댓글입니다. Edit

drop specific procedure ANAMDB.SQL030717012613684

-> drop specific procedure ANAM.SQL030717012613684


anamdb가 아니라 anam 인데..

조는 냥이님이 2008-05-29 14:19에 작성한 댓글입니다. Edit

schema는 물론 ANAM으로 했습니다.

그런데 지금 해 보니 어떤 Procedure는 정상적으로 삭제 되고,
또 어떤 것은 빈 테이블 어쩌고 하면서 삭제가 되지 않고 그러는군요!
(schema는 생략해도 삭제 됩니다)

db Restore하면서 아마도 뭔가가 꼬인 것 같은데 영...

아무튼 답변 감사합니다.

박경욱님이 2008-05-29 15:24에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1622가로로 나오는 값을 세로로 나오게 하고싶습니다. [3]
조동연
2008-06-02
13067
1620IDENTITY ALWAYS 컬럼 값 받아오는 방법 [1]
조성환
2008-05-30
11444
1619날짜관련문제... [3]
윤동민
2008-05-29
11955
1618스토어드프로시저 빌드관련 문제 [11]
박경욱
2008-05-29
11016
1617조인 관련 질문드립니다. [3]
이도희
2008-05-27
10594
1616디비쿼리문좀 만들어주세요~ [4]
윤동민
2008-05-26
11498
1615간단한 시간질문 [2]
윤동민
2008-05-26
10134
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다