2008. 9. 24. 09:23
취미
09-16-2008, 02:39 PM | #2 (permalink) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Administrator
Status: Administrator
Join Date: Jul 2008
Posts: 610
|
|
posted by
좋은느낌/원철
http://bbs.sports.media.daum.net/gaia/do/sports/bbs/group2/jbaseball/read?bbsId=F010&articleId=34622&pageIndex=2&searchKey=&searchValue=&sortKey=depth&searchName=&RIGHT_SPORTS_BEST
**********************************************************************************************
(1)
캐스터 : 5만명이 넘는 관중앞에서 공을 던지는 투수의 심정은 어떨까요...너무 떨리지 않을까요?
차명석 해설위원 어떨거 같습니까?
차명석 : 굉장히 떨리겠죠..근데 저는 잘 모르겠습니다. 그렇게 중요한 빅게임에서 선발 투수로
던질 기회가 없었거든요. 그리고 중간계투로 나가도.채 떨리기 전에 강판당하기 일쑤였죠.
(2)
캐스터 : 앤디 페티트 선수 견제구 동작이 좋아 주자들이 리드를 잘 못하는 군요...
차명석 : 앤디 페티트 선수 지난 8년동안 견제구 아웃이 67개나 되네요.
일반 시청자 여러분들이 이게 얼마나 좋은 기록인줄 잘 모르시겠죠...
이해를 위해서 말씀드리면 제 선수생활 10년동안 견제구 아웃이 3개밖에 없었습니다....
(3)
캐스터 : 죠쉬 버켓선수 6회인데도 구속이 96마일이 나오네요.
차명석 : 정말 타고난 어깨죠...저런 어깨를 가진 선수를 보면...맨날 느린공만 던질 수 밖에
없던 저로 서는 부럽다는 말밖에 없어요. 정말 부럽죠. 그런데 저런 선수를 보면
부러운데...강한 어깨를 가진 투수중에서 컨트롤이 안되는 투수들을 보면 화가 나요.
나에게 저런 어깨를 줬으면 제가 지금 여기서 해설을 하고 있겠습니까?
(4)
캐스터 : 원아웃 2루 상황에서 투수코치가 나오고 있네요...투수에게 무슨 말을 할까요?
차명석 : 지금 타자가 타격감이 좋으니까 볼넷을 줄걸 각오하고 어려운 승부를 하라고 하겠죠
캐스터 : 어려운 승부라면?
차명석 : 스트라이크 존에서 볼 1~2개 정도 빠지는 볼을 던지고 걸려들면 다행이고 안 걸려드면
포볼로 걸르라는 거죠. 근데 그게 정말 말도 안되는 주문이죠...그렇게 정교하게
컨트롤 할 수 있으면 잡아내죠...왜 걸릅니까?
(5)
끝내기 홈런이 터지자
캐스터;아...저런 상황에서 홈런을 맞았을 때,기분은 투수 당사자말곤 아무도 모를겁니다.
차명석:아,저는 현역시절 홈런 맞은 경험이 많아서. 잘 압니다.
캐스터:.......
(6)
보스턴의 토드 워커(Walker)가 병살타 치면서 부진하자
캐스터:요즘 들어 워커가 매우 부진한데요.
차명석:네,일단 Walker는 이름부터 Runner로 바꿔야 될 것 같습니다.
캐스터:......
(7)
캐스터:지금 잘하는 야구선수들도 야구를 시작하던 무렵 존경하던 선수를 많이 닮아가게 되는 경향이 있죠?
차명석:물론입니다. 어린 시절에 잘하던 선수가 누구였느냐에 의해 많은 영향을 받습니다.
제가 어렸을 때는 장호연 투수가 무척 날렸는데 그래서 제 구속이 그렇게 느렸나 봅니다.
캐스터:......
(8)
캐스터:프라이어 선수 다 좋은데 옥에 티라면 타자에게 너무 신경을 써서 투구수가 조금 많아지는 경향이 있어요.
차명석:저는 선수 시절에 그나마 제구력이 좋았다는 소리를 들었으니 티에 옥이었죠.
(9)
캐스터:아, 오늘 그레그 매덕스의 제구가 정말 돋보이는 게임입니다. 차명석 해설위원님도
현역 시절엔 차덕스란 별명을 갖고 계실 정도로 제구력이 좋으셨는데요. 어떠신지요?
차명석:저랑 매덕스랑 닮은 것은 공 느린거 하나 뿐입니다.
캐스터 : ............................
(10)
(생중계 중 연장 17회까지 간 경기에서 방송나가는지 모르고)
차명석:미치겠네(너무 화장실에 가고 싶어서 그런 실수를 했다고 나중에 해명.)
(11)
차명석:저 선수 부인 참 미인입니다.
캐스터:스포츠선수들 부인이 대부분 미인 아닙니까? 왜 그럴까요.
차명석:그런 전통이 있었습니다. 그런데,제가 무참히 깨버렸죠.
캐스터:집에 가서 어쩌실려구요.
차명석:….(침묵)
(12)
캐스터:기억에 남는 올스타전 추억이 있습니까?
차명석:네, 저는 올스타전 추억이 아주 많습니다. 올스타로 뽑힌적이 없어서
그 기간엔 가족들과 여행 추억이 많죠
캐스터:.....
(13)
캐스터:저런 상황에서 홈런 맞았을 때의 기분은 투수 당사자 말고는 아무도 모를 겁니다.
차명석:전 현역 시절 홈런 맞은 경험이 많아 잘 압니다.
캐스터:.........
(14)
캐스터:오늘 중계를 맡은 지방 케이블방송이 주로 메이저리그와 낚시를 중계한답니다.
참 특이한 일이군요. 야구와 낚시가 관계가 있습니까?
차명석:야구선수 중에도 낚시광이 많습니다.
캐스터:낚시 좋아하면 가족도 버린다던데….
차명석:제가 전에 모시던 감독도 낚시 참 좋아하셨습니다. 낚시 하며 제 생각 많이 했다더군요.
저놈을 짤라야 되나 말아야 되나.
(15)
양키스와 보스턴의 경기 중계방송에서
캐스터 : 아..정말 저 선수는 10년에 한번 나올까 말까 한 선수에요..
차명석 : 저도 선수시절에 10년에 하나 나오는 투수라는 소리를 들어보고 싶었어요.
그런데 아무도 그런 말을 안하더라구요.
캐스터 : 하하하^^;
차명석 : 어느날 코치님꼐 얘길 했더니 "너같은 투수는 10분에 하나씩 나온다"고 하셔서
기분이 굉장히 나빴던 기억이 있습니다.
캐스터 : .................
(16)
캐스터 : 너클볼 투수인 팀 웨이크필드 다음에 앨런 엠브리가 던지니깐
공이 더 빨라 보이는거 같아요..
차명석 : 그래서 제가 항상 이상훈 투수 앞에 던졌죠..
캐스터 : ........
(17)
캐스터 : 와 케리우드 선수 슬라이더 90마일 찍힙니다....... 참 대단하네요
차명석 : 전성기 시절 저의 직구 보다 빠르군요......
캐스터 : .......................
(18)
캐스터 : 드류! 장거리홈런이네요!
차명석 : 저런 홈런을 쳐본적은 없어도 맞아는 봤습니다.
대전구장에서 장종훈에게 맞은 홈런이 어찌나 컸는지 아직까지 날아가고 있을껍니다
캐스터 : .......
효과적인 SQL 작성 가이드
만약 그렇지 않다면, DB2가 인덱스를 사용할 수 없어서 성능에 부정적인 영향을 미치게 됩니다.
예를 들어, CHAR(6)으로 정의된 칼럼을 CHAR(4)나 CHAR(7)인 필드와 비교하게 되면
데이터 변환이 일어나고 DB2가 인덱스를 사용하는 대신 데이터 스캔을 하게 되어 성능이 저하됩니다.
꼭 필요한 컬러만 Order by를 사용하십시오.
하지만, 결과 데이터를 변경해야 하는 경우에는 FOR UPDATE OF를 이용하는 Cursor로 선언하는 것이 갱신되는 Row에 Exclusivce Lock을 걸어 데이터 무결성을 보장해주므로 더 좋습니다.
조회 전용일 경우에는 Select 문에 FOR FETCH ONLY 절을 사용합니다.
만약 그 이상 테이블을 사용해야 하면, Subquery 대신에 Join 을 사용하십시오.
Optimizer 가 Join을 사용할 때 데이터 접근 방법을 더 많이 가지고 있기 때문입니다.
그러나 예외도 있으므로 쿼리 별로 테스트가 필요합니다.
예를 들어 다음과 같은 경우 substr 대신 like를 사용하십시오.
like를 사용하는 경우 index를 사용하게 됩니다.
예) select custinfo from sales where substr(serial,1,4) = ‘1333’
select custinfo from sales where serial like ‘1333%’
SQL의 기존 함수를 사용하는 것이 이런 함수를 응용프로그램으로 만들어 사용하는 것보다 더 효과적입니다.
데이터 형태의 변경, 문자열의 조작, 그리고 날짜/시간의 변경들을 위해 사용되는 SQL Scalar 함수(INTEGER, DECIMAL, HEX, SUBST등)는 사용을 피하십시오.
이것은 DB2 LOG에 어떻게 DB2가 변화한 것을 기록하는지를 연관 지어서 효과적으로 고려한 것입니다.
BETWEEN은 Optimizer에게 더 효과적인 접근 경로를 선택하게 해줍니다.
이렇게 하면 DB2 가 sequential prefetch를 수행하기 때문에 성능을 높일 수 있습니다.
만약 일어날 수 있는 특정 수만 알고 있다면, LIKE를 사용하는 것보다 IN에 목록을 나열하는 것이 더 효과적입니다.
예를 들어, 만약 Last Name이 M으로 시작하는 모든 근로자를 찾는다면,
LIKE ‘m%’ 대신에 BETWEEN ‘maaaaaaaaaaaaaa’ and ‘mzzzzzzzzzzzzzz’를 사용하십시오.
UNION 대신 UNION ALL을 사용합니다.
가능하면 NOT IN 대신 NOT EXISTS를 사용합니다.
NOT EXISTS를 사용할 때 DB2는 단지 존재하지 않는 것만 확인하지만,
NOT IN조건을 포함하면, DB2는 완벽한 결과 집합을 구성해서 조건을 비교하게 됩니다.
예) select eno,ename from emp , proj where workdept = deptno and empno = respemp (O)
select eno, ename from emp
where workdept = ( select deptno from proj where respemp = emp.empno) (X)
원본 위치 <http://www.iteg.co.kr/a/b/content.asp?tb=i2&page=4&num=16>
출처 : http://www.ibm.com/developerworks/kr/library/0211yip/0211yip3.html
*********************************************************************************************************
머리말
DB2 UDB에 익숙하지 않은 사람들에게 날짜와 시간을 조작하는 방법을 설명한다. 다른 데이터베이스를 다뤄본 많은 사람들에게 DB2 UDB가 얼마나 쉬운지를 설명하겠다.
SQL을 사용하여 날짜, 시간, 타임스탬프를 파악하려면 해당 DB2 레지스터리를 참조하라.
SELECT current date FROM sysibm.sysdummy1 SELECT current time FROM sysibm.sysdummy1 SELECT current timestamp FROM sysibm.sysdummy1 |
sysibm.sysdummy1 테이블은 위에서 설명한 대로 DB2 레지스터의 값을 찾는데 사용할 수 있는 특별한 인메모리(in-memory) 테이블이다. VALUES 키워드를 사용하여 레지스터나 식을 계산할 수 있다. 예를 들어, DB2 Command Line Processor (CLP)에서 다음 SQL 문장에는 비슷한 정보들이 나타난다.
VALUES current date VALUES current time VALUES current timestamp |
남아있는 예제에는 SELECT ... FROM sysibm.sysdummy1
을 반복하거나 VALUES 구문을 사용하지 않고 함수 또는 식을 제공하도록 하겠다.
GMT/CUT에 맞춘 현재 시간이나 현재 타임스탬프를 얻으려면 현재 시간 또는 타임스탬프에서 현재 타임존 레지스터를 제거한다.
current time - current timezone current timestamp - current timezone |
날짜 시간, 타임스탬프의 경우, 적절한 함수를 사용하여 년도, 달, 요일, 시간, 분, 초, 마이크로초를 추출할 수 있다.
YEAR (current timestamp) MONTH (current timestamp) DAY (current timestamp) HOUR (current timestamp) MINUTE (current timestamp) SECOND (current timestamp) MICROSECOND (current timestamp) |
타임스탬프와 관계없이 날짜와 시간을 추출하는 것 역시 매우 쉽다.
DATE (current timestamp) TIME (current timestamp) |
영어로도 날짜와 시간 계산을 할 수 있다. :
current date + 1 YEAR current date + 3 YEARS + 2 MONTHS + 15 DAYS current time + 5 HOURS - 3 MINUTES + 10 SECONDS |
두 날짜 간에 날수가 얼마나 되는지를 계산하려면 날짜를 빼면 된다.
days (current date) - days (date('1999-10-22')) |
다음은 마이크로초 부분을 0으로 재설정하고 현재 타임스탬프를 얻는 방법이다.
CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS |
날짜 또는 시간 값을 다른 텍스트와 연결시키려면 그 값을 문자열로 변환해야 한다. CHAR() 함수를 사용한다.
char(current date) char(current time) char(current date + 12 hours) |
문자열을 날짜 또는 시간 값으로 변환하려면 다음과 같이 한다.
TIMESTAMP ('2002-10-20-12.00.00.000000') TIMESTAMP ('2002-10-20 12:00:00') DATE ('2002-10-20') DATE ('10/20/2002') TIME ('12:00:00') TIME ('12.00.00') |
TIMESTAMP(), DATE(), TIME() 함수는 여러 포맷들을 허용한다. 위 포맷은 단순한 예제일 뿐이다. 독자 여러분이 스스로 해 보길 바란다.
경고: DATE 함수에서 쿼트를 없애면 어떻게 될까? 함수는 여전히 작동하겠지만 정확하지 않은 DATE가 나올 것이다.
결과:
위 결과에서 어떻게 2000년 이나 차이가 났을까? DATE 함수가 입력으로 문자열을 취하면 DB2 날짜의 유효 문자로 간주되고, 따라서 이를 변환하는 것이다. 반대로, 입력이 숫자라면 이 함수는 현재 년도(0001-01-01)에서 1을 제한 날 수를 나타내는 것으로 간주한다. 위 쿼리에서 입력은 2001-09-22였고 이것은 (2001-9)-22과 동일하다. 또한 이것은 1970이다. |
가끔씩, 두 개의 타임스탬프들이 어떻게 차이가 있는지 알아야 한다. 이를 위해 DB2는 TIMESTAMPDIFF()라고 하는 빌트인 함수를 제공한다. 하지만 리턴된 값은 근사값이다. 윤년을 고려하지 않고 한 달을 30일로만 가정하기 때문이다. 다음은 두 날짜들 간 차이를 찾아내는 방법이다.
timestampdiff (<n>, char( timestamp('2002-11-30-00.00.00')- timestamp('2002-11-08-00.00.00'))) |
<n>의 자리에, 다음 값들을 사용하여 시간 단위를 나타낸다.
timestampdiff()를 사용하면 날짜가 비교적 가까이 있을 때 더 정확한 결과가 나온다. 보다 정확한 계산을 원하면 다음을 사용하여 시간 단위로(초 단위로) 차이를 결정한다.
(DAYS(t1) - DAYS(t2)) * 86400 + (MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2)) |
SQL의 사용자 정의 함수를 사용할 수도 있다.
CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP) RETURNS INT RETURN ( (DAYS(t1) - DAYS(t2)) * 86400 + (MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2)) ) @ |
윤달일 경우 날 수를 결정할 때 쓸 수 있는 유용한 SQL 함수가 있다.
CREATE FUNCTION daysinyear(yr INT) RETURNS INT RETURN (CASE (mod(yr, 400)) WHEN 0 THEN 366 ELSE CASE (mod(yr, 4)) WHEN 0 THEN CASE (mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 END ELSE 365 END END)@ |
마지막으로 다음은 날짜 조작에 쓰이는 빌트인 함수들이다. 여러분의 필요에 맞는 함수를 빠르게 선택하는데 사용하기 바란다. 보다 자세한 정보는 SQL 레퍼런스를 참조하기 바란다.
SQL 날짜와 시간 함수 | ||
DAYNAME | 인자에 요일 이름(예, 금요일)이 포함된 혼합 문자열을 리턴. | |
DAYOFWEEK | 1에서 7까지 정수 값으로 요일을 나타낸다. 여기에서 1은 일요일을 의미한다. | |
DAYOFWEEK_ISO | 1에서 7까지 정수 값으로 요일을 나타낸다. 여기에서 1은 월요일이다. | |
DAYOFYEAR | 1에서 366 까지의 정수로 날(day)을 리턴. | |
DAYS | 날짜를 정수로 리턴. | |
JULIAN_DAY | January 1, 4712 B.C. (Julian 달력의 시작)부터 인자에 지정된 날짜 값까지 정수로 날수를 나타냄. | |
MIDNIGHT_SECONDS | 0에서 86400 까지의 정수 값으로 자정(midnight)과 인자에서 지정된 시간 값 사이의 초의 값을 나타냄. | |
MONTHNAME | 달의 이름(예를 들어, January)을 포함하고 있는 혼합 문자열 리턴. | |
TIMESTAMP_ISO | 날짜, 시간, 타임스탬프 인자에 기반한 타임스탬프 값을 리턴. | |
TIMESTAMP_FORMAT | 문자 템플릿을 사용하여 인터프리팅 된 문자열에서 타임스탬프를 리턴. | |
TIMESTAMPDIFF | 두 타임스탬프들 간 차이에 기반하여, 첫 번째 인자에서 정의된 유형의 인터벌 수를 리턴. | |
TO_CHAR | 문자 템플릿을 사용하여 포맷된 타임스탬프의 문자 구현을 리턴. TO_CHAR는 VARCHAR_FORMAT의 동의어이다. | |
TO_DATE | 문자 템플릿을 사용하여 인터프리팅 된 문자열에서 타임스탬프를 리턴. TO_DATE는 TIMESTAMP_FORMAT의 동의어이다. | |
WEEK | 1에서 54까지 정수 값으로 주(week)를 리턴함. 주는 Sunday로 시작한다. | |
WEEK_ISO | 1에서 53까지 정수 값으로 주를 리턴함. |
날짜 표현에 관한 질문을 자주 받는다. 날짜에 사용되는 기본 포맷은 데이터베이스의 영역(territory) 코드로 결정된다. (이것은 데이터베이스 생성 때 지정될 수 있다.) 예를 들어, 데이터베이스가 territory=US
를 사용하여 만들어졌다면 날짜 포맷은 다음과 같을 것이다.
values current date 1 ---------- 05/30/2003 1 record(s) selected. |
말하자면 이것은 MM/DD/YYYY 포맷이다. 이 포맷을 변경하려면 db2 유틸리티 패키지 컬렉션을 다른 날짜 포맷으로 바인딩한다. 다음은 포맷 종류이다.
DEF | 영역 코드와 관련된 날짜 포맷과 시간 포맷을 사용. |
EUR | IBM 유럽 표준의 날짜와 시간 포맷을 사용함. |
ISO | International Standards Organization의 날짜와 시간 포맷을 사용. |
JIS | Japanese Industrial Standard의 포맷 사용. |
LOC | 해당 데이터베이스의 영역 코드와 관련된 로컬 형식의 날짜와 시간 포맷을 사용함. |
USA | IBM U.S. 표준을 사용함. |
ISO (YYYY-MM-DD)로 디폴트 포맷을 변경하려면 다음과 같이 한다.
sqllib\bnd
로 변경한다.
예:
On Windows: c:\program files\IBM\sqllib\bnd
On UNIX: /home/db2inst1/sqllib/bnd
db2 connect to DBNAME db2 bind @db2ubind.lst datetime ISO blocking all grant public |
(여러분의 상황에 적용할 때에는 데이터베이스 이름과 선호하는 날짜 포맷으로 대체한다.)
이제 데이터베이스가 ISO 날짜 포맷을 사용한다.
values current date 1 ---------- 2003-05-30 1 record(s) selected. |
마지막 예제에서는 DB2가 로컬 포맷으로 날짜를 나타내는 방식을 어떻게 변경하는지를 설명하였다. 하지만 'yyyymmdd'처럼 커스텀 포맷으로 하고싶다면? 최선의 방법은 커스텀 포맷팅 함수를 다시 작성하는 것이다.
UDF:
create function ts_fmt(TS timestamp, fmt varchar(20)) returns varchar(50) return with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as ( select substr( digits (day(TS)),9), substr( digits (month(TS)),9) , rtrim(char(year(TS))) , substr( digits (hour(TS)),9), substr( digits (minute(TS)),9), substr( digits (second(TS)),9), rtrim(char(microsecond(TS))) from sysibm.sysdummy1 ) select case fmt when 'yyyymmdd' then yyyy || mm || dd when 'mm/dd/yyyy' then mm || '/' || dd || '/' || yyyy when 'yyyy/dd/mm hh:mi:ss' then yyyy || '/' || mm || '/' || dd || ' ' || hh || ':' || mi || ':' || ss when 'nnnnnn' then nnnnnn else 'date format ' || coalesce(fmt,' <null> ') || ' not recognized.' end from tmp </null> |
이 함수 코드는 복잡해보인다. 하지만 자세히 살펴보면 매우 단순하면서도 좋은 코드임을 알 수 있다. 우선, common table expression (CTE)를 사용하여 타임스탬프(첫 번째 입력 매개변수)를 개별 컴포넌트에서 분리한다. 그런 다음, 제공된 포맷(두 번째 입력 매개변수)을 검사하고 요청된 포맷과 부분을 사용하여 타임스탬프를 다시 정렬한다. 이 함수는 매우 유연하다. 또 다른 패턴을 추가하려면 원하는 포맷과 함께 WHEN 구문을 붙이면 된다. 예상하지 못했던 패턴이 나타났다면 에러메시지가 리턴된 것이다.
사용 예제:
values ts_fmt(current timestamp,'yyyymmdd') '20030818' values ts_fmt(current timestamp,'asa') 'date format asa not recognized.' |
날짜와 시간에 관련된 질문들에 답이 되었기 바란다. 더 많은 예제들로 글을 업데이트 하겠다. (사실 독자들 덕분에 벌써 세 번씩이나 업데이트 했다.)
Bill Wilkins, DB2 Partner Enablement
Randy Talsma
이 글에는 샘플 코드가 포함되어 있습니다. IBM은 여러분 모두가 "로열티 " 없이 이 샘플 코드를 사용할 수 있도록 허용하고 있습니다. 하지만 이 샘플 코드는 그대로 제공되며 특정 목적에 맞춰 상용으로 사용해서는 안됩니다. IBM은 이 소프트웨어를 사용함으로써 초래된 어떤 손해에도 책임을 지지 않습니다. IBM은 손실, 영리 또는 데이터, 직접적인 손해, 간접적인 손해, 특별한 손해, 결과적인 손해, 일시적인 손해, 징벌로 인한 손해 등에 책임이 없습니다. IBM이 그와 같은 손실의 가능성을 만들었더라도 소프트웨어의 사용 또는 미사용에서 발생한 손실에는 책임이 없습니다.
Paul Yip, 데이터베이스 컨설턴트, IBM 토론토 연구실. |
김명훈, DB2 프리랜서 DBA
현재 DB2 프리랜서로 일하고 있으며 근래 주요 DB2 프로젝트는 POSCO 열연 생산관리 시스템 구축, K-Power DSS 시스템 설계 구축, 삼성 DB2 Monitoring 컨설팅 등을 담당하였다.
이번 회에는 DB2 애플리케이션 개발 중에 오라클 DB와 상이한 구문과 SQL 차이점에 대해서 설명하도록 하겠다. 곧 출시될 DB2 Viper 2에서는 오라클 DB에서만 사용하는 outer join의 + 구문이나 connect by의 Recursive SQL, row number, 오라클 DB 전용 함수들이 DB2의 레지스터리 값 변경 이후에 오라클 DB와 동일하게 사용할 수 있어져서 오라클 DB 사용자들의 DB2 사용이 용이해 졌다.
Data Type
오라클 DB와 DB2의 데이터 타입의 차이점은 DB2에서의 데이터 타입은 사용자 편의보다는 옵티마이저가 가장 잘 해석할 수 있도록 세분화 되어 있다는 점이다. 이는 DB2는 기본적으로 오라클 DB와 달리 Rule base 옵티마이저 모드를 지원하지 않기에 옵티마이저가 최대한 잘 해석할 수 있도록 만들어 주기 위함으로 보인다.
예를 들어 오라클 DB에서의 number와 같이 정수, 소수를 대표하는 Data Type은 DB2에서는 크기에 따라 SMALLINT, INTEGER, BIGINT, DECIMAL(p,s)등으로 세분화 되어 쓰여지게 되어 있다.
DB2는 오라클 DB에서와 같이 숫자와 문자간 자동 형 변환을 지원하지 않는다 따라서 문자와 숫자간 비교나 조인시 반드시 CAST, INT, CHAR 함수 등으로 형 변환을 해주어야 한다.
예>
select * from tab1 where col1 = int(‘1’)
select * from tab1 where col1 = cast (‘1’ as int)
DB2에서의 날짜 연산
1. to_char() 함수: DB2에도 오라클 DB의 to_char()와 동일한 이름의 함수는 있으나 오라클 DB에서와 같이 날짜 형식의 다양한 포멧팅을 지원하지는 않는다. 오라클 DB의 TO_CAHR() 함수를 쓰기 위해서는 별도의 UDF가 필요하다.(오라클/MS-SQL Built in Function에 대한 DB2 UDF는 첨부되어 있는 zip 파일을 참조해서 사용하기 바란다.)
2. sysdate(oracle) => current date(현재 날짜), current timestamp (현재 시간소인)
3. hex(current date) 문자열 YYYYMMDD 형식 예> 20080101
4. date / year / month / day 함수 입력된 시간소인(혹은 날짜형식 문자열)에 날짜(date yyyy-mm-dd), 년도(year –yyyy), 월(month – mm 2월인 경우 02가 아니고 2로 표시됨), 일(day – dd)로 변환하는 scalar 함수
5. 날짜 더하기/ 빼기 “+/- n days”, “+/- months”, “+/- years” 예>current date + 1 months
6. 날짜끼리 뺄 경우 결과는 YYYYMMDD(decimal(8,0))형식으로 두 일자 사이의 기간을 나타내게 된다. 예) values(date('2008-02-10') -date('2007-01-01')); 00010109 (1년 1개월 9일)
7. 날짜 포멧 변경
char(current date, iso) – 2008-01-01
char(current date, eur) – 01.01.2008
char(current date, usa) – 01/01/2008
Page navigation을 위한 Row Number
OLAP 함수인 row_number() over(order by 컬럼이름)로 대체해서 사용해야 한다.
Select empno, fullname
From (select empno
, firstnme || ' ' || lastname as fullname
, row_number() over (order by empno) as r_num
from employee ) as t1
Where r_num >= 10 and r_num <20
Dummy Table
Sysibm.sysdummy1 (DB2)
select * from sysibm.sysdummy1
Truncate Table
DB2에서는 오라클 DB에서의 Truncate table은 존재하지 않는다. DB2에서 테이블의 데이터를 효율적으로 지우는 방법은 아래와 같다.
Import from /dev/null of del replace into 테이블이름
Alter table 테이블이름 activate not logged initially with empty table
ALTER TABLE EMPLOYEE ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
Decode문
Decode문은 지원하지 않는다. Case문으로 대체해야 한다.
UPDATE staff
SET comm = salary + DECODE(job,'Mgr',100,0)
UPDATE staff
SET comm = salary + CASE job
WHEN 'Mgr' THEN 100 ELSE 0 END
NULL 처리
Sequence
데이터베이스 전체에서 관리되는 Sequence와 별도로 테이블마다 제공되는 컬럼 sequence도 존재한다. 각 사용법은 아래와 같다
Procedure
1. 프로시저 생성시 CREATE OR REPLACE 옵션을 제공하지 않는다. 따라서 이미 존재하고 있는 프로시저일 경우 Drop 후 재생성 해야 한다. 이때 프로시저를 참조하는 Routine이 있으면 같이 Drop하고 생성해 주어야 한다.
2. 데이터 타입 정의시 반드시 길이를 정해 주어야 한다. 길이가 정해져 있지 않은 데이터 타입은 사용이 불가능 하다. 또한 참조되는 객체의 길이가 서로 다를 경우 생성되지 않으므로 참조되는 객체의 길이와 타입은 반드시 동일하게 생성해 주어야 한다.
3. 입/출력 값에 설정시 IN, OUT, INOUT을 변수 명 앞에 선언하고 변수와 변수 타입(크기가 명시된)을 선언한다.
4. LANGUAGE SQL 옵션은 ver7.x에서는 반드시 써야 하지만 ver8.x부터는 선택 사항이다.
5. Procedure 호출은 Call 명령어를 통해 호출한다.
Call stored_procedure_name (input1, input2….)
Temporary Table
Temporary table을 사용하기 위해서는 반드시 사용자 임시 테이블 스페이스 타입의 테이블 스페이스가 존재해야 하며, 세션에 독립적으로 생성되어 세션이 종료됨과 함께 자동으로 소멸된다.
-- User Temp 테이블 스페이스 작성
CREATE USER TEMPORARY TABLESPACE apptemps
MANAGED BY SYSTEM USING ('apptemps');
-- Temp Table 작성
DECLARE GLOBAL TEMPORARY TABLE t_employees LIKE employee NOT LOGGED;
Trigger
1. 트리거 생성시 CREATE OR REPLACE 옵션을 제공하지 않는다. 따라서 이미 존재하는 트리거일 경우 drop후 재 생성해야 한다.
2. Before 트리거에서 NO CASCADE 옵션은 필수 항목이다.
3. MODE DB2SQL 옵션은 필수 항목이다.
4. UPDATE & DELETE 구문은 Before&After를 사용해야 한다.
5. 오라클 DB의 INSERT OR UPDATE OR DELETE ON과 같은 다중 역할을 하는 트리거 생성이 불가능하다. 따라서 각 역할에 따라 트리거를 별도로 생성해 주어야 한다.
6. INNER SQL(Select .. INTO)을 통한 변수 설정이 불가능 하기 때문에 반드시 SET을 통해 SELECT 결과를 변수에 입력하여야 한다. 이때 SELECT 문장의 값은 반드시 단일 Row여야 한다.
변수 정의와 규칙
Oracle PL/SQL 같은 경우 아래의 4가지 위치에 변수 값 정의가 가능하다.
1. 스토어드 프로시저 또는 함수 파라미터 리스트 안
2. 스토어드 프로시저, 함수, 트리거의 내부
3. 패키지 정의
4. 패키지 body 정의
DB2에서는 오라클 DB에서와 같이 함수나 프로시저를 그룹화하는 패키지 개념이 없다. 따라서 변수 값 정의는 패키지를 제외한 위의 두 가지 경우만 허용된다.
DB2 SQL PL에서도 native data type과 user defined distinct type의 여러 형태 정의가 가능하다. 변수 정의시 반드시 DECLARE 구문을 써서 정의하여야 하며, 변수 값 정의를 위해서는 반드시 BEGIN … END 블록 안에서 정의되어야 한다. 초기값 설정 이후 변수에 값을 설정할 경우 DB2에서는 SET 문장을 써서 변수를 assign 한다.
예> 초기값 설정
Oracle PL/SQL: l_value NUMBER(10,2) :=0.0;
DB2 SQL PL: DECLARE l_value NUMERIC(10,2) DEFAULT 0.0;
예> 변수 값 할당
Oracle PL/SQL: l_value = 99.99;
DB2 SQL PL: SET l_value = 99.99;
Trigger의 경우 INNER SQL(Select .. INTO)을 통한 변수 설정이 불가능 하기 때문에 반드시 SET을 통해 SELECT 결과를 변수에 입력하여야 한다. 이때 SELECT 문장의 값은 반드시 단일 Row여야 한다.
SET l_value =(SELECT balance from account_info where account_no = actNo);
Cursor 처리
1. 응용프로그램에서 결과 집합을 검색하기 위해 사용하는 기법으로 Select 문에서 여러 건의 데이터를 반환하는 경우에 사용된다.
2. 커서는 declare / open / fetch / close의 단계로 사용된다.
3. Open된 커서는 UOW(unit of work) 종료시(commit / rollback) 소멸되지만 DB2에서는 With HOLD 옵션으로 커서의 위치를 유지할 수 있다.
4. DB2는 Memory level의 Lock을 사용하며 그에 따른 Cursor의 유형도 읽기 전용(READ ONLY)과 업데이트 가능한 UPDATEABLE 커서가 있다.
5. UPDATEABLE(FOR UPDATE OF)를 사용하면 데이터를 Fetch 하는 동안 S모드 대신 U모드 LOCK이 적용되어 Deadlock을 방지할 수 있다.
커서 예외 처리
Debugging
DB2에는 오라클 DB의 dbms.output.put_line과 같은 함수가 존재 하지 않는다. 따라서 dbms.output.put_line 함수와 같은 UDF Fuction을 만들거나, 디버깅 테이블을 만들어 디버깅 하고자 하는 값을 새로 만든 디버깅 테이블에 Insert 하는 방법이 있다.
아래의 방법은 put_line UDF를 생성하여 디버깅 하는 방법에 대한 설명이다. 해당 원문은 아래의 Site에서 확인 하기 바란다.
http://www.ibm.com/developerworks/db2/library/techarticle/0302izuha/0302izuha.html
put_line UDF생성 방법
CREATE PROCEDURE TESTCASE() RESULT SETS 0 LANGUAGE SQL
L_TESTCASE:
BEGIN NOT ATOMIC
DECLARE V_DEPTNO SMALLINT;
DECLARE V_DEPTNAME VARCHAR(20);
DECLARE V_DIVISION VARCHAR(20);
-- FOR DEBUG
DECLARE V_NUM SMALLINT DEFAULT 0;
DECLARE V_MSG1 VARCHAR(4000);
DECLARE V_MSG2 VARCHAR(1);
-- END
-- SAMPLE1
SET V_NUM=2000;
SET V_MSG1='debugging start';
VALUES(PUT_LINE(V_NUM,V_MSG1)) INTO V_MSG2;
-- SAMPLE2
VALUES(PUT_LINE(SMALLINT(2),'this is no2'))
INTO V_MSG2;
-- SAMPLE3
VALUES(PUT_LINE(3)) INTO V_MSG2;
-- SAMPLE4
VALUES(PUT_LINE('##number4##')) INTO V_MSG2;
-- SAMPLE5
SET V_NUM = 0;
FOR V_C1_REC AS C1 CURSOR FOR
SELECT DEPTNUMB, DEPTNAME, DIVISION
FROM ORG ORDER BY DEPTNUMB DESC
DO
SET V_DEPTNO = v_C1_REC.DEPTNUMB;
SET V_DEPTNAME = v_C1_REC.DEPTNAME;
SET V_DIVISION = v_C1_REC.DIVISION;
SET V_NUM = V_NUM + 1;
SET V_MSG1 ='DEPTNO=' || CHAR(V_DEPTNO)||',' ||'DEPTNAME='||V_DEPTNAME||','
||'DIVISION='||V_DIVISION;
VALUES(PUT_LINE(V_NUM,V_MSG1)) INTO V_MSG2;
END FOR;
VALUES(PUT_LINE(32000,'end of the program'))
INTO V_MSG2;
END L_TESTCASE
<참조>
Oracle to DB2 UDB Conversion Guide(IBM.com/redbooks)
DB2 사용자 가이드(IBM)
이 절에서는 SQLSTATE와 해당되는 의미를 나열합니다. SQLSTATE는 클래스 코드별로 그룹지어집니다. 부속 코드에 대해서는 해당 테이블을 참조하십시오.
클래스 코드 |
의미 |
부속 코드에 대해 참조할 페이지 |
---|---|---|
00 | 규정되지 않은 성공적인 완료 | 표 3 |
01 | 경고 | 표 4 |
02 | 데이터 없음 | 표 5 |
07 | 동적 SQL 오류 | 표 6 |
08 | 연결 예외 | 표 7 |
09 | 트리거 조치 예외 | 표 8 |
0A | 기능(feature)이 지원되지 않음 | 표 9 |
0D | 유효하지 않은 목표 유형 스펙 | 표 10 |
0F | 유효하지 않은 토큰 | 표 11 |
0K | 유효하지 않은 RESIGNAL문 | 표 12 |
20 | CASE문에 해당하는 Case가 없음 | 표 13 |
21 | 카디낼리티 위반 | 표 14 |
22 | 데이터 예외 | 표 15 |
23 | 제한조건 위반 | 표 16 |
24 | 유효하지 않은 커서 상태 | 표 17 |
25 | 유효하지 않은 트랜잭션 상태 | 표 18 |
26 | 유효하지 않은 SQL문 ID | 표 19 |
28 | 유효하지 않은 권한 부여 스펙 | 표 21 |
2D | 유효하지 않은 트랜잭션 종료 | 표 22 |
2E | 유효하지 않은 연결 이름 | 표 23 |
34 | 유효하지 않은 커서 이름 | 표 24 |
36 | 커서 감도 예외 | 표 25 |
38 | 외부 함수 예외 | 표 26 |
39 | 외부 함수 호출 예외 | 표 27 |
3B | 유효하지 않은 SAVEPOINT | 표 28 |
40 | 트랜잭션 롤백 | 표 29 |
42 | 구문 오류 또는 액세스 규칙 위반 | 표 30 |
44 | WITH CHECK OPTION 위반 | 표 31 |
46 | Java DDL | 표 32 |
51 | 유효하지 않은 응용프로그램 상태 | 표 33 |
53 | 유효하지 않은 피연산자 또는 불일치 스펙 | 표 34 |
54 | SQL 또는 제품 한계가 초과됨 | 표 35 |
55 | 오브젝트가 전제(Prerequisite) 상태에 있지 않음 | 표 36 |
56 | 기타 SQL 또는 제품 오류 | 표 37 |
57 | 자원이 사용 가능하지 않거나 조작원이 개입함 | 표 38 |
58 | 시스템 오류 | 표 39 |
SQLSTATE 값 | 의미 |
---|---|
00000 | 조작을 정상적으로 실행했으며 어떠한 유형의 경고 또는 예외 상황도 발생하지 않았습니다. |
SQLSTATE 값 | 의미 |
---|---|
01002 | DISCONNECT 오류가 발생했습니다. |
01003 | 널(NULL) 값이 컬럼 함수의 인수에서 제거되었습니다. |
01004 | 문자열 값이 짧은 길이로 다른 문자열 데이터 유형에 지정될 때 절단되었습니다. |
01005 | SQLDA 내의 항목 수가 충분하지 않습니다. |
01007 | 특권이 부여되지 않았습니다. |
0100C | 프로시저로부터 하나 이상의 임시(ad hoc) 결과 세트가 리턴되었습니다. |
0100D | 닫혀진 커서가 체인 내에 있는 다음 결과 세트에 대해 다시 열렸습니다. |
0100E | 프로시저가 허용되는 최대수를 초과하는 결과 세트를 생성했습니다. 첫 번째 정수 결과 세트만이 호출자에게 리턴되었습니다. |
01503 | 결과 컬럼의 수가 제공된 호스트 변수의 수보다 큽니다. |
01504 | UPDATE 또는 DELETE문이 WHERE절을 포함하지 않습니다. |
01506 | 산술 연산의 결과로 나온 유효하지 않은 날짜를 정정하기 위해 DATE 또는 TIMESTAMP값이 조정되었습니다. |
01509 | 사용자의 가상 머신에 스토리지가 충분하지 않으므로 커서에 대한 블로킹이 취소되었습니다. |
01515 | 컬럼의 널(NULL)이 아닌 값이 호스트 변수의 범위 내에 있지 않으므로 널(NULL) 값이 호스트 변수에 지정되었습니다. |
01516 | 적용할 수 없는 WITH GRANT OPTION이 무시되었습니다. |
01517 | 변환할 수 없는 문자가 대체 문자로 바뀌였습니다. |
01519 | 숫자 값이 범위를 벗어나므로 널(NULL) 값이 호스트 변수에 지정되었습니다. |
01524 | 컬럼 함수의 결과에 산술 연산식 평가로 생성된 널(NULL) 값이 들어 있지 않습니다. |
01526 | 분리 레벨이 에스컬레이션되었습니다. |
01527 | SET문이 AS에 존재하지 않는 특수 레지스터를 참조합니다. |
01539 | 연결에는 성공했으나, SBCS 문자만 사용되어야 합니다. |
01543 | 중복된 제한조건이 무시되었습니다. |
01545 | 규정되지 않은 컬럼 이름이 상관 참조로 해석되었습니다. |
01550 | 설명이 지정된 인덱스가 이미 있으므로, 인덱스가 작성되지 않았습니다. |
01560 | 중복된 GRANT가 무시되었습니다. |
01562 | 데이터베이스 구성 파일의 로그에 대한 새 경로(newlogpath)가 유효하지 않습니다. |
01563 | 로그 파일에 대한 현재 경로(logpath)가 유효하지 않습니다. 로그 파일 경로가 디폴트값으로 재설정됩니다. |
01564 | 0으로 나누어 호스트 변수에 널(NULL) 값이 지정되었습니다. |
01586 | 참조 구조에서 상위 테이블에 대한 제한조건을 OFF로 설정하면, 하나 이상의 하위 테이블이 자동으로 점검 보류 상태가 됩니다. |
01589 | 명령문에 불필요한 스펙이 들어 있습니다. |
01592 | SOURCE 함수를 참조하는 CREATE FUNCTION문에서
|
01594 | SQLDA에서 ALL 정보의 항목 수가 충분하지 않습니다.(예: 구별 이름을 리턴하는 데 필요한 디스크립터가 충분하지 않습니다.) |
01595 | 해당 뷰가 기존의 유효하지 않은 뷰를 대체했습니다. |
01596 | Long 문자열 데이터 유형에 근거한 구별 유형에 대해 비교 함수가 작성되지 않았습니다. |
01598 | 이미 사용 중인 이벤트 모니터를 활성화하거나 사용하고 있지 않은 이벤트 모니터를 비활성화하려고 시도했습니다. |
01599 | REBIND에 대한 바인드 옵션이 무시되었습니다. |
01602 | 최적화 레벨이 감소되었습니다. |
01603 | CHECK DATA 처리 중 제한조건 위반을 발견하고 이를 예외 테이블로 이동시켰습니다. |
01604 | SQL문이 Explain되었으나 실행되지 않았습니다. |
01605 | 재귀 공통 테이블 표현식에 무한 루프가 들어 있을 수 있습니다. |
01606 | 노드 또는 시스템 데이터베이스 디렉토리가 비어 있습니다. |
01607 | 읽기 전용 트랜잭션의 노드에 대한 시간 차이가 정의된 임계값을 초과합니다. |
01609 | 프로시저가 허용되는 최대수를 초과하는 결과 세트를 생성했습니다. 첫 번째 정수 결과 세트만이 호출자에게 리턴되었습니다. |
01610 | 프로시저로부터 하나 이상의 임시(ad hoc) 결과 세트가 리턴되었습니다. |
01611 | 닫혀진 커서가 체인 내에 있는 다음 결과 세트에 대해 다시 열렸습니다. |
01614 | 로케이터 수가 결과 세트 수보다 적습니다. |
01616 | 계산된 CPU 비용이 자원 한계를 초과합니다. |
01618 | 노드 그룹을 재분배하려면 데이터 파티션을 변경해야 합니다. |
01620 | UNION ALL의 일부 기본 테이블이 동일한 테이블일 수도 있습니다. |
01621 | 검색된 LOB 값이 변경되었을 수도 있습니다. |
01622 | 명령문이 완료되었으나, 명령문이 완료된 후에 시스템 오류가 발생했습니다. |
01623 | DEGREE 값이 무시됩니다. |
01625 | 스키마 이름은 CURRENT PATH에서 두 번 이상 나타납니다. |
01626 | 데이터베이스에 사용 중인 버퍼 풀이 하나만 있습니다. |
01627 | DATALINK 값은 테이블이 조정 보류 중이거나 조정할 수 없는 상태이므로 유효하지 않을 것입니다. |
01632 | 동시 연결의 수가 제품에 대해 정의된 한계를 초과했습니다. |
01633 | 구체화된 쿼리 테이블을 쿼리 처리 최적화에 사용하지 못할 수도 있습니다. |
01636 | 비증분식 데이터의 무결성이 데이터베이스 관리 프로그램에서 확인되지 않았습니다. |
01637 | 디버깅이 작동 가능하지 않습니다. |
01639 | 페더레이티드 오브젝트에는 호출자가 데이터 소스 오브젝트에 대한 필수 특권을 갖고 있어야 합니다. |
01641 | 데이터 링크 유형 속성은 구조화된 유형의 사용을 제한합니다. |
01642 | 컬럼이 가장 큰 USER 디폴트값이 들어갈 만큼 크지 않습니다. |
01643 | SQL 루틴의 SQLSTATE 또는 SQLCODE 변수에 지정한 값을 겹쳐쓸 수 있으며, 지정된 값으로 핸들러가 활성화되지 않습니다. |
01645 | SQL 프로시저의 실행 파일이 데이터베이스 카탈로그에 저장되어 있지 않습니다. |
01648 | VALUE COMPRESSION이 테이블에 대해 비활성화되었으므로 COMPRESS 컬럼 속성이 무시되었습니다. |
01649 | 버퍼 풀 조작이 완료되었으나 다음에 데이터베이스를 재시작할 때까지 적용되지 않습니다. |
01650 | 인덱스와 테이블 통계가 일치하지 않습니다. |
01651 | 이벤트 모니터가 활성화되었지만, 일부 모니터링 정보가 손실되었을 수 있습니다. |
01652 | 명령문 컨텍스트로 인해 분리 절이 무시됩니다. |
01653 | USER에게 권한을 부여하였습니다. 권한 부여 이름이 8바이트를 초과하기 때문에 그룹이 고려되지 않았습니다. |
01654 | 버퍼 풀이 시작되지 않았습니다. |
01655 | 이벤트 모니터가 작성되었지만, 최소한 하나의 이벤트 모니터 목표 테이블이 이미 존재합니다. |
01657 | 다음에 데이터베이스를 시작할 때까지 버퍼 풀 조작이 적용되지 않습니다. |
01665 | 컬럼 이름 또는 매개변수 이름이 절단되었습니다. |
01667 | 뷰를 쿼리 처리 최적화에 사용하지 못할 수도 있습니다. |
01669 | 지정된 별칭에 통계가 리모트와 로컬 카탈로그 간의 스키마 불일치로 인해 갱신되지 않았습니다. |
01670 | 새로운 테이블에 대한 기본 디폴트 테이블 스페이스가 없습니다. |
01671 | 캐시된 명령문의 환경이 현재 환경과 다릅니다. 현재 환경은 지정된 명령문을 다시 최적화하는 데 사용됩니다. |
01H51 | MQSeries Application Messaging Interface 메시지가 절단되었습니다. |
01HXX | 사용자 정의 함수(UDF) 또는 외부 프로시저 CALL에 의해 유효한 경고 SQLSTATE가 리턴되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
02000 | 다음 예외 중 하나가 발생했습니다.
|
02501 | 커서 위치가 현재 행의 FETCH에 유효하지 않습니다. |
02502 | 홀(hole) 삭제 또는 갱신이 발견되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
07001 | 호스트 변수의 수가 매개변수 표시문자의 수에 대해 올바르지 않습니다. |
07002 | 호출 매개변수 목록 또는 제어 블록이 유효하지 않습니다. |
07003 | EXECUTE문에서 식별된 명령문이 SELECT문이거나, 준비된 상태가 아닙니다. |
07004 | 동적 매개변수에 USING절 또는 INTO절이 필요합니다. |
07005 | 커서의 명령문 이름이 준비된 명령문을 식별하는데, 이 명령문은 커서와 연관될 수 없습니다. |
07006 | 입력 호스트 변수의 데이터 유형 때문에 이 변수를 사용할 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
08001 | 응용프로그램 리퀘스터가 연결을 설정할 수 없습니다. |
08002 | 연결이 이미 존재합니다. |
08003 | 연결이 존재하지 않습니다. |
08004 | 응용프로그램 서버(AS)가 연결 설정을 거부했습니다. |
08007 | 알 수 없는 트랜잭션 해석(resolution). |
08502 | 사용 가능한 트랜잭션 관리 프로그램이 없어서 TWOPHASE의 SYNCPOINT로 실행 중인 응용프로그램 프로세스에서 발행한 CONNECT문이 실패했습니다. |
08504 | 지정된 경로 이름 바꾸기 구성 파일을 처리하는 중에 오류가 발견되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
09000 | 트리거 SQL문이 실패했습니다. |
SQLSTATE 값 | 의미 |
---|---|
0A001 | 프로세스가 연결 가능한 상태에 있지 않으므로, CONNECT문이 유효하지 않습니다. |
0A502 | 이 데이터베이스 인스턴스에 대한 조치 또는 조작이 작동 가능하지 않습니다. |
0A503 | 데이터의 불일치 가능성이 있으므로 페더레이티드 삽입, 갱신 또는 삭제 조작을 컴파일할 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
0D000 | 목표 구조화된 데이터 유형 스펙이 적절한 소스 구조화된 데이터 유형의 부속 유형이 아닙니다. |
SQLSTATE 값 | 의미 |
---|---|
0F001 | LOB 토큰 변수가 현재 어떤 값도 나타내지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
0K000 | RESIGNAL문이 핸들러 내에 있지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
20000 | CASE문에 해당하는 Case가 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
21000 | SELECT INTO의 결과가 두 행 이상의 결과 테이블이거나, 기본 술어의 서브쿼리 결과가 둘 이상의 값입니다. |
21501 | 자체 참조 테이블로의 복수 행 삽입(INSERT)은 유효하지 않습니다. |
21502 | 기본 키의 복수 행 갱신(UPDATE)은 유효하지 않습니다. |
21504 | RESTRICT나 SET NULL 삭제 규칙이 있는 자체 참조 테이블로부터의 복수 행 삭제(DELETE)는 유효하지 않습니다. |
21505 | 행 함수는 둘 이상의 행을 리턴해서는 안됩니다. |
21506 | 테이블의 동일한 행을 두 번 이상 갱신, 삭제 또는 삽입 조작의 목표로 사용할 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
22001 | 문자 데이터의 오른쪽 절단이 발생했습니다. 예를 들어, 갱신 또는 삽입 값이 컬럼에 비해 너무 긴 문자열이거나 날짜 시간 값이 너무 작아 호스트 변수에 지정할 수 없습니다. |
22002 | 널(NULL) 값 또는 표시기 매개변수가 없습니다. 예를 들면, 표시기 변수가 지정되어 있지 않으므로, 호스트 변수에 널(NULL) 값을 지정할 수 없습니다. |
22003 | 숫자 값이 범위를 벗어납니다. |
22004 | PARAMETER STYLE GENERAL로 정의된 프로시저 또는 널(Null)이 아닌 인수로 호출된 유형 보존 메소드에서 널(Null) 값이 리턴될 수 없습니다. |
22007 | 유효하지 않은 날짜 시간 형식이 발견되었습니다. 즉, 유효하지 않은 문자열 표현이나 값이 지정되었습니다. |
22008 | 날짜 시간 필드 오버플로우가 발생했습니다. 예를 들어, 날짜 또는 시간소인에 대한 산술 연산의 결과가 유효한 날짜 범위 내에 있지 않습니다. |
2200G | 대부분의 동적 유형이 일치하지 않습니다. |
22011 | 부속 문자열 오류가 발생했습니다. 예를 들어, SUBSTR의 인수가 범위를 벗어납니다. |
22012 | 0으로 나누는 것은 유효하지 않습니다. |
22018 | CAST, DECIMAL, FLOAT 또는 INTEGER 스칼라 함수에 대한 문자 값이 유효하지 않습니다. |
22019 | LIKE 술어에 유효하지 않은 Escape 문자가 있습니다. |
22021 | 문자가 코드화된 문자 세트에 없습니다. |
22024 | NUL 종료 입력 호스트 변수 또는 매개변수가 NUL을 포함하지 않습니다. |
22025 | LIKE 술어 문자열 패턴에 유효하지 않은 Escape 문자의 어커런스가 들어 있습니다. |
2202D | 널(NULL) 인스턴스가 mutator 메소드에 사용되었습니다. |
2202H | TABLESAMPLE절의 샘플 크기가 유효하지 않습니다. |
22501 | 가변 길이 문자열의 길이 제어 필드가 음수이거나 최대값보다 큽니다. |
22504 | 혼합 데이터 값이 유효하지 않습니다. |
22506 | TOD 시계가 고장났거나 운영 체제 시간대 매개변수가 범위를 벗어났기 때문에, 날짜 시간 특수 레지스터에 대한 참조가 유효하지 않습니다. |
22522 | CCSID 값이 전혀 유효하지 않거나, 데이터 유형 또는 부속 유형에 유효하지 않거나, 코드화 체계에 유효하지 않습니다. |
22526 | 키 변환 함수에서 행을 생성하지 않았거나 중복 행을 생성했습니다. |
22527 | 다중 행 INSERT 조작에 유효하지 않은 입력 데이터가 발견되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
23001 | 상위 키의 갱신 또는 삭제는 RESTRICT 갱신 또는 삭제 규칙에 의해 금지됩니다. |
23502 | 삽입 또는 갱신 값이 널(NULL)이지만, 컬럼이 널(NULL) 값을 포함할 수 없습니다. |
23503 | 외부 키에 대해 삽입 또는 갱신 값이 유효하지 않습니다. |
23504 | 상위 키의 갱신 또는 삭제는 NO ACTION 갱신 또는 삭제 규칙에 의해 금지됩니다. |
23505 | 고유 인덱스 또는 고유 제한조건에 의해 부여된 제한조건의 위반이 발생했습니다. |
23510 | RLST 테이블에 의해 부과된 명령 사용시 제한조건의 위반이 발생했습니다. |
23511 | 점검 제한조건이 삭제를 제한하므로 상위 행을 삭제할 수 없습니다. |
23512 | 테이블에 제한조건 정의를 충족시키지 않는 행이 들어 있으므로 점검 제한조건을 추가할 수 없습니다. |
23513 | INSERT 또는 UPDATE의 결과 행이 점검 제한조건 정의를 준수하지 않습니다. |
23514 | 데이터 점검 처리 중 제한조건 위반이 발견되었습니다. |
23515 | 테이블에 지정한 키에 대해 중복된 값이 들어 있으므로, 고유 인덱스를 작성하거나 고유 제한조건을 추가할 수 없습니다. |
23520 | 모든 외부 키의 값이 상위 테이블의 상위 키와 동일하지 않으므로, 외부 키를 정의할 수 없습니다. |
23521 | 카탈로그 테이블의 갱신이 내부 제한조건을 위반합니다. |
23522 | 식별 컬럼 또는 순서에 대한 값 범위가 모두 사용되었습니다. |
23524 | UNION ALL 뷰 내의 행 이동이 유효하지 않습니다. |
23527 | 페더레이티드 데이터 원본에서 무결성 제한조건을 위반했습니다. |
SQLSTATE 값 | 의미 |
---|---|
24501 | 식별된 커서는 열려 있지 않습니다. |
24502 | OPEN문에서 식별된 커서는 이미 열려 있습니다. |
24504 | UPDATE, DELETE, SET 또는 GET문에서 식별된 커서가 행에 위치하지 않습니다. |
24506 | PREPARE에서 식별된 명령문은 열린 커서의 명령문입니다. |
24510 | 삭제 홀(hole) 또는 갱신 홀(hole)에 대해 UPDATE 또는 DELETE 조작이 시도되었습니다. |
24512 | 결과 테이블이 기본 테이블과 일치하지 않습니다. |
24513 | 커서 위치를 알 수 없으므로 FETCH NEXT, PRIOR, CURRENT 또는 RELATIVE가 허용되지 않습니다. |
24514 | 이전 오류가 이 커서를 작동 불가능화하게 했습니다. |
24516 | 커서가 이미 결과 세트에 지정되었습니다. |
24517 | 외부 함수 또는 메소드에 의해 커서가 열린 상태로 있습니다. |
SQLSTATE 값 | 의미 |
---|---|
25000 | 삽입, 갱신 또는 삭제 조작은 지정된 컨텍스트에서 유효하지 않습니다. |
25001 | 이 명령문은 작업 단위(UOW)에서 첫 번째 명령문으로만 허용됩니다. |
25501 | 이 명령문은 작업 단위(UOW)에서 첫 번째 명령문으로만 허용됩니다. |
25502 | 단일 트랜잭션에 조작이 여러 번 발생할 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
26501 | 식별된 명령문이 존재하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
27000 | 제한조건 또는 트리거에 의해 MERGE문의 목표 테이블을 수정하려고 했습니다. |
SQLSTATE 값 | 의미 |
---|---|
28000 | 권한 부여 이름이 유효하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
2D521 | SQL COMMIT 또는 ROLLBACK이 현재 운영 환경에서는 유효하지 않습니다. |
2D522 | ATOMIC 복합 명령문에서는 COMMIT 및 ROLLBACK이 허용되지 않습니다. |
2D528 | 동적 COMMIT가 응용프로그램 실행 환경에 유효하지 않습니다. |
2D529 | 동적 ROLLBACK이 응용프로그램 실행 환경에 유효하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
2E000 | 연결 이름이 유효하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
34000 | 커서 이름이 유효하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
36001 | SENSITIVE 커서는 지정된 SELECT문에 대해 정의할 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
38XXX | 외부 루틴 또는 트리거에 의해 유효한 오류 SQLSTATE가 리턴되었습니다. |
38001 | SQL문 실행에 외부 루틴은 허용되지 않습니다. |
38002 | 루틴이 데이터를 수정하려 했으나, 이 루틴은 MODIFIES SQL DATA로 정의되지 않았습니다. |
38003 | 명령문이 루틴에서 허용되지 않습니다. |
38004 | 루틴이 데이터를 읽으려 했으나, 이 루틴은 READS SQL DATA로 정의되지 않았습니다. |
38501 | 사용자 정의 함수(UDF), 외부 프로시저 또는 트리거를 호출(SIMPLE CALL 또는 SIMPLE CALL WITH NULLS 호출 규약 사용)하는 동안 오류가 발생했습니다. |
38502 | SQL문 실행에 외부 함수는 허용되지 않습니다. |
38503 | 사용자 정의 함수(UDF)가 이상 종료되었습니다. |
38504 | 사용자가 가능한 루핑 상태를 중지하려고 사용자 정의 함수(UDF)를 인터럽트했습니다. |
38505 | 루틴의 FINAL CALL에서 SQL문이 허용되지 않습니다. |
38506 | 함수가 OLE DB Provider로부터의 오류로 실패했습니다. |
38552 | SYSFUN 스키마의 함수(IBM 제공)가 비정상적으로 종료했습니다.
다음과 같은 이유 코드 중 하나가 메시지 텍스트에 나타날 수 있습니다.
|
38553 | 시스템 스키마의 루틴이 오류로 종료되었습니다. |
38H01 | MQSeries 함수가 초기화하는 데 실패했습니다. |
38H02 | MQSeries Application Messaging Interface가 세션을 종료하는 데 실패했습니다. |
38H03 | MQSeries Application Messaging Interface가 메시지를 적절히 처리하지 못했습니다. |
38H04 | MQSeries Application Messaging Interface가 메시지를 보내는 데 실패했습니다. |
38H05 | MQSeries Application Messaging Interface가 메시지 읽기 및 받기에 실패했습니다. |
38H06 | MQSeries Application Messaging Interface (비)서브스크립션 요청에 실패했습니다. |
38H07 | MQSeries Application Messageing Inteface가 작업 단위(UOW)를 커미트하는 데 실패했습니다. |
38H08 | MQSeries Application Messaging Interface 규정 오류. |
38H09 | MQSeries XA (2단계 커미트) API 호출 오류. |
38H0A | MQSeries Application Messaging Interface가 작업 단위(UOW)를 롤백하는 데 실패했습니다. |
SQLSTATE 값 | 의미 |
---|---|
39001 | 사용자 정의 함수(UDF)가 유효하지 않은 SQLSTATE를 리턴했습니다. |
39004 | IN 또는 INOUT 인수에는 널(NULL) 값이 허용되지 않습니다. |
39501 | 인수와 연관된 구조 식별자(eye-catcher)가 수정되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
3B001 | 세이브포인트가 유효하지 않습니다. |
3B002 | 최대 세이브포인트 수에 도달했습니다. |
3B501 | 중복된 세이브포인트 이름이 발견되었습니다. |
3B502 | RELEASE 또는 ROLLBACK TO SAVEPOINT가 지정되었으나 세이브포인트가 존재하지 않습니다. |
3B503 | 트리거 또는 전역 트랜잭션에서는 SAVEPOINT, RELEASE SAVEPOINT 또는 ROLLBACK TO SAVEPOINT가 허용되지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
40001 | 자동 롤백되는 교착 상태나 시간종료가 발생했습니다. |
40003 | 명령문 완료를 알 수 없습니다. |
40504 | 시스템 오류로 인해 작업 단위가 롤백되었습니다. |
40506 | SQL 오류로 인해 현재 트랜잭션이 롤백되었습니다. |
40507 | 인덱스 작성의 실패로 현재 트랜잭션이 롤백되었습니다. |
SQLSTATE 값 | 의미 |
---|---|
42501 | 권한 부여 ID에는 식별된 오브젝트에 대해 지정한 조작을 실행할 수 있는 특권이 없습니다. |
42502 | 권한 부여 ID에는 지정된 대로 조작을 수행할 수 있는 특권이 없습니다. |
42504 | 지정한 특권을 지정된 권한 부여 이름에서 취소할 수 없습니다. |
42506 | 소유자 권한 부여에 실패했습니다. |
42508 | 지정한 데이터베이스 특권을 PUBLIC으로 부여할 수 없습니다. |
42509 | STATICRULES 옵션으로 인해 SQL 문에는 권한이 부여되지 않았습니다. |
42511 | DATALINK 값을 검색할 수 없습니다. |
42601 | 문자, 토큰 또는 절이 유효하지 않거나 누락되었습니다. |
42602 | 이름에서 유효하지 않은 문자가 발견되었습니다. |
42603 | 종료되지 않은 문자열 상수가 발견되었습니다. |
42604 | 유효하지 않은 숫자나 문자열 상수가 발견되었습니다. |
42605 | 스칼라 함수에 대해 지정된 인수의 수가 유효하지 않습니다. |
42606 | 유효하지 않은 16진수 상수가 발견되었습니다. |
42607 | 컬럼 함수의 피연산자가 유효하지 않습니다. |
42608 | VALUES에서의 NULL 또는 DEFAULT 사용이 유효하지 않습니다. |
42609 | 연산자나 술어의 모든 피연산자가 매개변수 표시문자입니다. |
42610 | 매개변수 표시문자가 허용되지 않습니다. |
42611 | 컬럼 또는 인수 정의가 유효하지 않습니다. |
42612 | 명령문 문자열이, 제시되는 컨텍스트에서 허용되지 않는 SQL문입니다. |
42613 | 절이 상호 배제적(exclusive)입니다. |
42614 | 중복된 키워드는 유효하지 않습니다. |
42615 | 유효하지 않은 다른 방법이 발견되었습니다. |
42616 | 유효하지 않은 옵션이 지정되었습니다. |
42617 | 명령문 문자열이 공백이거나 비어 있습니다. |
42618 | 호스트 변수가 허용되지 않습니다. |
42620 | 읽기 전용 SCROLL이 UPDATE절에 대해 지정되었습니다. |
42621 | 점검 제한조건이 유효하지 않습니다. |
42622 | 이름이나 레이블이 너무 깁니다. |
42623 | DEFAULT절을 지정할 수 없습니다. |
42625 | CASE 표현식이 유효하지 않습니다. |
42627 | RETURNS절은 EXPRESSION AS절을 사용하는 술어 스펙 앞에 지정되어야 합니다. |
42628 | TO SQL 또는 FROM SQL 트랜잭션 함수가 변환 정의에 두 번 이상 정의되었습니다. |
42629 | SQL 루틴에는 매개변수 이름이 지정되어야 합니다. |
42630 | SQLSTATE 또는 SQLCODE 변수 선언이 중첩된 복합 명령문 내에 있어서는 안됩니다. |
42631 | SQL 함수 또는 메소드에 있는 RETURN문은 리턴 값을 포함해야 합니다. |
42634 | XML 이름이 유효하지 않습니다. |
42635 | XML 이름 스페이스 접두부가 유효하지 않습니다. |
42701 | 삽입, 갱신 조작 또는 SET 전이 변수 명령문에서 중복된 컬럼 이름이 발견되었습니다. |
42702 | 중복된 이름으로 인해 컬럼 참조가 명확하지 않습니다. |
42703 | 정의되지 않은 컬럼, 속성 또는 매개변수 이름이 발견되었습니다. |
42704 | 정의되지 않은 오브젝트 이름이나 제한조건 이름이 발견되었습니다. |
42705 | 정의되지 않은 서버 이름이 발견되었습니다. |
42707 | ORDER BY내의 컬럼 이름이 결과 테이블의 컬럼을 식별하지 않습니다. |
42709 | PRIMARY, UNIQUE 또는 FOREIGN KEY절에서 중복된 컬럼 이름이 발견되었습니다. |
42710 | 중복된 오브젝트 이름 또는 제한조건 이름이 발견되었습니다. |
42711 | 중복된 컬럼 이름이나 속성 이름이 오브젝트 정의 또는 ALTER문에서 발견되었습니다. |
42712 | FROM절에서 중복된 테이블 지정자가 발견되었습니다. |
42713 | 오브젝트 목록에 중복되는 오브젝트가 발견되었습니다. |
42720 | 리모트 데이터베이스에 대한 노드 이름이 노드 디렉토리에 없습니다. |
42723 | 동일한 시그니처를 갖는 함수가 스키마에 이미 있습니다. |
42724 | 사용자 정의 함수(UDF) 또는 프로시저에 사용되는 외부 프로그램에 액세스할 수 없습니다. |
42725 | 함수 또는 메소드가 직접 참조되었지만(시그니처 또는 특정 인스턴스 이름에 의해서가 아님), 해당 함수의 특정 인스턴스가 둘 이상 있습니다. |
42726 | 이름 지정된 파생된 테이블(derived table)에 대해 중복된 이름이 발견되었습니다. |
42727 | 새로운 테이블에 기본 디폴트 테이블 스페이스가 없습니다. |
42728 | 노드 그룹 정의에서 중복된 노드가 발견되었습니다. |
42729 | 노드가 정의되어 있지 않습니다. |
42730 | 컨테이너 이름이 이미 다른 테이블 스페이스에서 사용되고 있습니다. |
42731 | 컨테이너 이름이 이미 이 테이블 스페이스에서 사용되고 있습니다. |
42732 | SET CURRENT PATH문에서 중복된 스키마 이름이 발견되었습니다. |
42734 | 중복된 매개변수 이름, SQL 변수 이름, 커서 이름, 조건 이름 또는 레이블이 발견되었습니다. |
42735 | 테이블 스페이스를 위한 노드 그룹이 버퍼 풀에 대해 정의되어 있지 않습니다. |
42736 | LEAVE문에 지정된 레이블이 없거나 유효하지 않습니다. |
42737 | 핸들러에 지정된 조건이 정의되어 있지 않습니다. |
42738 | 중복된 컬럼 이름 또는 이름이 지정되지 않은 컬럼이 FOR문의 DECLARE CURSOR문에 지정되었습니다. |
42739 | 중복된 변환이 발견되었습니다. |
42740 | 지정된 유형에 대한 변환이 없습니다. 변환이 삭제되지 않았습니다. |
42741 | 데이터 유형에 대한 변환 그룹이 정의되어 있지 않습니다. |
42742 | 유형이 지정된 테이블 또는 유형이 지정된 뷰 계층 구조에 같은 유형의 서브테이블이나 서브뷰가 이미 있습니다. |
42743 | 검색 메소드가 인덱스 확장에 없습니다. |
42744 | 변환 그룹에 TO SQL 또는 FROM SQL 변환 함수가 정의되어 있지 않습니다. |
42745 | 루틴이 기존의 메소드를 사용하여 중첩 관계를 정의합니다. |
42746 | 메소드 이름은 같은 유형 계층 구조 내의 구조화된 유형 이름과 같을 수 없습니다. |
42748 | 스토리지 경로가 데이터베이스에 대해 이미 존재하거나 두 번 이상 지정되었습니다. |
42802 | 삽입 값 또는 갱신 값의 수가 컬럼의 수와 동일하지 않습니다. |
42803 | SELECT 또는 HAVING절의 컬럼 참조는 컬럼이 그룹화 컬럼이 아니므로, 유효하지 않습니다. 또는 GROUP BY절의 컬럼 참조가 유효하지 않습니다. |
42804 | CASE 표현식의 결과 표현식이 호환 가능하지 않습니다. |
42805 | ORDER BY절의 정수는 결과 테이블의 컬럼을 식별하지 않습니다. |
42806 | 데이터 유형이 호환 가능하지 않으므로, 호스트 변수에 값을 지정할 수 없습니다. |
42807 | 이 오브젝트에 대해서는 INSERT, UPDATE 또는 DELETE가 허용되지 않습니다. |
42808 | 삽입 또는 갱신 조작에서 식별된 컬럼은 갱신 불가능합니다. |
42809 | 식별된 오브젝트는 명령문이 적용되는 오브젝트의 유형이 아닙니다. |
42810 | 기본 테이블이 FOREIGN KEY절에서 식별되지 않습니다. |
42811 | 지정한 컬럼 수가 SELECT절의 컬럼 수와 동일하지 않습니다. |
42813 | WITH CHECK OPTION을 지정한 뷰에 사용할 수 없습니다. |
42815 | 데이터 유형, 길이, 스케일, 값 또는 CCSID가 유효하지 않습니다. |
42816 | 표현식의 날짜 시간 값 또는 지속기간이 유효하지 않습니다. |
42818 | 연산자 또는 함수의 피연산자가 호환되지 않습니다. |
42819 | 산술 연산의 피연산자 또는 숫자를 요구하는 함수의 피연산자가 숫자가 아닙니다. |
42820 | 숫자 상수가 너무 길거나, 그 값이 해당 데이터 유형의 범위 내에 있지 않습니다. |
42821 | 갱신 또는 삽입 값이 컬럼과 호환되지 않습니다. |
42823 | 하나의 컬럼만 허용되는 서브쿼리로부터 여러 컬럼이 리턴되었습니다. |
42824 | LIKE의 피연산자가 문자열이 아니거나 첫 번째 피연산자가 컬럼이 아닙니다. |
42825 | UNION, INTERSECT, EXCEPT 또는 VALUES의 행에 호환되는 컬럼이 없습니다. |
42826 | UNION, INTERSECT, EXCEPT 또는 VALUES의 행에서 컬럼 수가 동일하지 않습니다. |
42827 | UPDATE 또는 DELETE에서 식별된 테이블이 커서에 의해 지정된 동일한 테이블이 아닙니다. |
42828 | UPDATE 또는 DELETE문의 커서에 의해 지정된 테이블을 수정할 수 없거나, 커서가 읽기 전용입니다. |
42829 | 커서에 의해 지정된 결과 테이블을 수정할 수 없으므로 FOR UPDATE OF는 유효하지 않습니다. |
42830 | 외부 키가 상위 키의 설명을 따르지 않습니다. |
42831 | 기본 키 또는 고유 키의 컬럼에 널(NULL) 값이 허용되지 않습니다. |
42832 | 조작이 시스템 오브젝트에 대해 허용되지 않습니다. |
42834 | 외부 키의 컬럼에 널(NULL) 값을 지정할 수 없으므로 SET NULL을 지정할 수 없습니다. |
42835 | 이름 지정된 파생된 테이블(derived table) 간에 순환 참조를 지정할 수 없습니다. |
42836 | 반복적인 이름 지정된 파생된 테이블(derived table)의 스펙이 유효하지 않습니다. |
42837 | 컬럼의 속성이 현재 컬럼 속성과 호환되지 않으므로, 컬럼을 변경할 수 없습니다. |
42838 | 테이블 스페이스의 유효하지 않은 사용이 발견되었습니다. |
42839 | 인덱스 및 긴 컬럼을 해당 테이블과 별도의 테이블 스페이스에 둘 수 없습니다. |
42840 | AS CAST 옵션의 유효하지 않은 사용이 발견되었습니다. |
42841 | 매개변수 표시문자는 사용자 정의 유형 또는 참조 유형이 될 수 없습니다. |
42842 | 지정한 옵션이 컬럼 설명과 일치하지 않으므로, 컬럼 정의가 유효하지 않습니다. |
42845 | VARIANT 또는 EXTERNAL ACTION 함수의 유효하지 않은 사용이 발견되었습니다. |
42846 | 소스 유형에서 목표 유형으로의 캐스트가 지원되지 않습니다. |
42852 | GRANT 또는 REVOKE에 지정된 특권이 유효하지 않거나 일관성이 없습니다(예: 뷰에 대한 GRANT ALTER). |
42853 | 두 가지 방법의 옵션이 지정되었거나 같은 옵션이 두 번 이상 지정되었습니다. |
42854 | 선택 목록의 결과 컬럼 데이터 유형이 유형이 지정된 뷰나 구체화된 쿼리 테이블 정의에 정의된 유형과 호환되지 않습니다. |
42855 | 이 호스트 변수에 대한 LOB의 지정이 허용되지 않습니다. 이 커서의 이 LOB 값에 대한 모든 페치의 목표 호스트 변수는 로케이터이거나 LOB 변수여야 합니다. |
42858 | 조작을 지정된 오브젝트에 적용할 수 없습니다. |
42863 | REXX에서 정의되지 않은 호스트 변수가 발견되었습니다. |
42866 | CREATE FUNCTION문 내 CAST FROM절의 RETURNS절에 있는 데이터 유형이 함수 내용에 있는 전래 함수나 RESTURN문에 의해 리턴된 데이터 유형에 적합하지 않습니다. |
42867 | 충돌하는 옵션이 지정되었습니다. |
42872 | FETCH문 절이 커서 정의와 호환되지 않습니다. |
42875 | CREATE SCHEMA 내에서 작성할 오브젝트의 규정자가 스키마 이름과 동일해야 합니다. |
42877 | 컬럼 이름을 규정할 수 없습니다. |
42878 | 유효하지 않은 함수 또는 프로시저 이름이 EXTERNAL 키워드에 사용되었습니다. |
42879 | CREATE FUNCTION문에 있는 하나 이상의 입력 매개변수의 데이터 유형이 소스 함수의 해당 데이터 유형에 적합하지 않습니다. |
42880 | CAST TO와 CAST FROM 데이터 유형이 호환되지 않거나, 항상 고정 문자열이 절단되게 합니다. |
42881 | 행 기본 함수의 사용이 잘못되었습니다. |
42882 | 특정 인스턴스 이름 규정자가 함수 이름 규정자와 동일하지 않습니다. |
42883 | 시그니처가 일치하는 함수 또는 메소드가 없습니다. |
42884 | 지정된 이름과 호환되는 인수를 갖는 루틴이 없습니다. |
42885 | CREATE FUNCTION문에 지정된 입력 매개변수 수가 SOURCE절에 이름 지정된 함수에서 제공하는 수와 일치하지 않습니다. |
42886 | IN, OUT 또는 INOUT 매개변수 속성이 일치하지 않습니다. |
42887 | 함수가 발생한 컨텍스트에서 유효하지 않습니다. |
42888 | 테이블에 기본 키가 없습니다. |
42889 | 테이블에 기본 키가 이미 있습니다. |
42890 | 컬럼 목록이 참조 절에 지정되었으나, 식별된 상위 테이블에 지정된 컬럼 이름을 갖는 고유 제한조건이 없습니다. |
42891 | 중복된 UNIQUE 제한조건이 이미 있습니다. |
42893 | 다른 오브젝트가 종속되어 있기 때문에, 오브젝트 또는 제한조건을 삭제할 수 없습니다. |
42894 | DEFAULT 값이 유효하지 않습니다. |
42895 | 정적 SQL의 경우, 입력 호스트 변수의 데이터 유형이 프로시저 또는 사용자 정의 함수(UDF)의 매개변수와 호환 불가능하므로, 해당 입력 호스트 변수를 사용할 수 없습니다. |
428A0 | 사용자 정의 함수(UDF)의 기본이 되는 전래 함수(sourced function)에 오류가 발생했습니다. |
428A1 | 호스트 파일 변수가 참조하는 파일에 액세스할 수 없습니다. |
428A2 | 테이블에 파티션 키가 없으므로 테이블을 다중 노드로 구성된 노드 그룹에 지정할 수 없습니다. |
428A3 | 이벤트 모니터에 유효하지 않은 경로가 지정되었습니다. |
428A4 | 이벤트 모니터 옵션에 유효하지 않은 값이 지정되었습니다. |
428A5 | SET INTEGRITY문에 이름 지정된 예외 테이블이 적당한 구조로 되어 있지 않거나, 생성된 컬럼, 제한조건 또는 트리거와 함께 정의되었습니다. |
428A6 | SET INTEGRITY문에 이름 지정된 예외 테이블은 점검될 테이블 중 어느 것과도 같아서는 안됩니다. |
428A7 | 점검 중인 테이블의 수와 SET INTEGRITY문에 지정된 예외 테이블의 수가 일치하지 않습니다. |
428A8 | 상위 테이블이 점검 보류(check-pending) 상태에 있는 동안에는 하위 테이블에 SET INTEGRITY문을 사용하여 점검 보류 상태를 재설정할 수 없습니다. |
428A9 | 노드 범위가 유효하지 않습니다. |
428AA | 컬럼 이름이 이벤트 모니터 테이블에 유효한 컬럼이 아닙니다. |
428B0 | ROLLUP, CUBE 또는 GROUPING SETS 내에 잘못된 중첩(nesting)이 있습니다. |
428B1 | 특정 노드에 대해 지정되지 않은 테이블 스페이스 컨테이너 스펙의 수가 올바르지 않습니다. |
428B2 | 컨테이너에 대한 경로 이름이 유효하지 않습니다. |
428B3 | 유효하지 않은 SQLSTATE가 지정되었습니다. |
428B7 | SQL문에 지정된 번호가 유효한 범위를 벗어납니다. |
428BO | 페더레이티드 데이터 소스에 대한 플랜이 작성 가능하지 않습니다. |
428C0 | 노드 그룹의 유일한 노드이므로 노드를 삭제할 수 없습니다. |
428C1 | 하나의 ROWID 컬럼만이 테이블에 대해 지정될 수 있습니다. |
428C2 | 함수 내용의 검사는 제공된 절이 CREATE FUNCTION문에서 지정되어야 함을 나타냅니다. |
428C4 | 술어 연산자의 양쪽에 있는 요소의 수가 동일하지 않습니다. |
428C5 | 데이터 소스로부터 데이터 유형에 대한 데이터 유형 맵핑을 찾을 수 없습니다. |
428C9 | ROWID 컬럼은 INSERT 또는 UPDATE의 목표 컬럼으로서 지정될 수 없습니다. |
428CA | 추가 모드에 있는 테이블에는 클러스터된 인덱스가 있을 수 없습니다. |
428CB | 테이블 스페이스의 페이지 크기는 연관된 버퍼 풀의 페이지 크기와 일치해야 합니다. |
428D1 | DATALINK 값이 참조하는 파일에 액세스할 수 없습니다. |
428D4 | FOR문에 지정된 커서는 OPEN, CLOSE 또는 FETCH문에서 참조될 수 없습니다. |
428D5 | 끝 레이블이 시작 레이블과 일치하지 않습니다. |
428D6 | UNDO는 NOT ATOMIC문에는 허용되지 않습니다. |
428D7 | 조건 값이 허용되지 않습니다. |
428D8 | SQLSTATE 또는 SQLCODE 변수의 선언 또는 사용이 유효하지 않습니다. |
428DB | 오브젝트가 슈퍼 유형, 슈퍼 테이블 또는 슈퍼 뷰로 유효하지 않습니다. |
428DC | 함수 또는 메소드가 이 유형에 대한 변환으로 유효하지 않습니다. |
428DD | 필수 변환이 정의되지 않았습니다. |
428DE | PAGESIZE 값은 지원되지 않습니다. |
428DF | CREATE CAST에서 지정된 데이터 유형이 유효하지 않습니다. |
428DG | CREATE CAST에서 지정된 함수가 유효하지 않습니다. |
428DH | 유형 지정된 테이블에 대해 조작이 유효하지 않습니다. |
428DJ | 상속된 컬럼 또는 속성은 변경하거나 삭제할 수 없습니다. |
428DK | 참조 컬럼의 범위(scope)가 이미 정의되었습니다. |
428DL | 외부 또는 전래 함수의 매개변수의 범위(scope)가 정의되었습니다. |
428DM | 범위 테이블이나 뷰가 참조 유형에 유효하지 않습니다. |
428DN | SCOPE가 외부 함수의 RETURNS절에 지정되지 않았거나 전래 함수의 RETURNS절에 지정되었습니다. |
428DP | 유형이 구조화된 유형이 아닙니다. |
428DQ | 서브테이블이나 서브뷰는 슈퍼 테이블이나 슈퍼 뷰와 다른 스키마 이름을 가질 수 없습니다. |
428DR | 조작은 서브테이블에 적용될 수 없습니다. |
428DS | 지정된 컬럼의 인덱스가 서브테이블에서 정의될 수 없습니다. |
428DT | 표현식의 피연산자가 유효한, 범위 지정된 참조 유형이 아닙니다. |
428DU | 유형이 필수 유형 계층 구조에 포함되지 않습니다. |
428DV | 비참조 연산자의 왼쪽 피연산자가 유효하지 않습니다. |
428DW | 오브젝트 ID 컬럼은 비참조 연산자를 사용하여 참조될 수 없습니다. |
428DX | 유형이 지정된 테이블이나 유형이 지정된 뷰 계층 구조의 루트 테이블이나 루트 뷰를 정의하는 데 오브젝트 ID 컬럼이 필요합니다. |
428DY | 목표 오브젝트 유형에 대한 통계를 갱신할 수 없습니다. |
428DZ | 오브젝트 ID 컬럼을 갱신할 수 없습니다. |
428E0 | 인덱스 정의가 인덱스 확장의 정의와 일치하지 않습니다. |
428E1 | 범위 생성 테이블 함수의 결과가 인덱스 확장에 대한 키 변환 테이블 함수와 일치하지 않습니다. |
428E2 | 키 목표 매개변수의 숫자나 유형이 인덱스 확장에 대한 키 변환 함수의 숫자나 유형과 일치하지 않습니다. |
428E3 | 인덱스 확장에서 함수에 대한 인수가 유효하지 않습니다. |
428E4 | 함수는 CREATE INDEX EXTENSION문에서 지원되지 않습니다. |
428E5 | SELECTIVITY절은 사용자 정의 술어를 사용해서만 지정될 수 있습니다. |
428E6 | 사용자 정의 술어에 있는 메소드의 검색 인수가 인덱스 확장의 해당 검색 메소드의 인수와 일치하지 않습니다. |
428E7 | 사용자 정의 술어에서 비교 연산자 다음에 오는 피연산자 유형이 RETURNS 데이터 유형과 일치하지 않습니다. |
428E8 | 검색 목표 또는 검색 인수 매개변수가 작성되는 함수의 매개변수 이름과 일치하지 않습니다. |
428E9 | 인수 매개변수 이름은 같은 작성 규칙에서 검색 목표와 검색 인수로 모두 나타날 수 없습니다. |
428EA | 유형이 지정된 뷰에서 fullselect가 유효하지 않습니다. |
428EB | 서브뷰의 컬럼은 슈퍼 뷰의 해당 컬럼이 갱신 가능할 때만 읽을 수 없습니다. |
428EC | 구체화된 쿼리 테이블에 대해 지정된 fullselect가 유효하지 않습니다. |
428ED | 데이터 링크 또는 참조 유형 속성의 구조화된 유형을 구성할 수 없습니다. |
428EE | 옵션이 이 데이터 소스에 유효하지 않습니다. |
428EF | 옵션 값이 이 데이터 소스에 유효하지 않습니다. |
428EG | 이 데이터 소스에 대한 필수 옵션이 누락되었습니다. |
428EH | 이미 정의되어 있는 옵션을 추가할 수 없습니다. |
428EJ | 추가되지 않은 옵션을 설정 또는 삭제할 수 없습니다. |
428EK | 선언된 전역 임시 테이블 이름에 대한 규정자는 SESSION이어야 합니다. |
428EL | 변환 함수는 함수 또는 메소드와 함께 사용할 수 없습니다. |
428EM | TRANSFORM GROUP절이 필요합니다. |
428EN | 사용되지 않은 변환 그룹이 지정되었습니다. |
428EP | 구조화된 유형은 직접적이든 간접적이든 자신에게 종속될 수 없습니다. |
428EQ | 루틴의 리턴 유형이 주제 유형과 동일하지 않습니다. |
428ER | 메소드 본문을 제거하기 전에 메소드 스펙을 제거할 수 없습니다. |
428ES | 메소드 본문이 메소드 스펙의 언어 유형에 해당하지 않습니다. |
428EU | TYPE 또는 VERSION이 서버 정의에 지정되어 있지 않습니다. |
428EV | 데이터 소스 유형에는 pass-through 기능이 지원되지 않습니다. |
428EW | 테이블을 요약 테이블로 또는 구체화된 쿼리 테이블을 테이블로 변환할 수 없습니다. |
428EX | 루틴이 내장 함수 또는 메소드이기 때문에 변환 함수로 사용될 수 없습니다. |
428EY | 사용자 정의 술어에 있는 검색 목표의 데이터 유형이 지정된 인덱스 확장의 소스 키에 대한 데이터 유형과 일치하지 않습니다. |
428EZ | OLAP 함수의 창 스펙이 유효하지 않습니다. |
428F0 | ROW 함수는 컬럼을 두 개 이상을 포함해야 합니다. |
428F1 | SQL TABLE 함수는 테이블 결과를 리턴해야 합니다. |
428F2 | SQL 프로시저에서 RETURN문 값의 데이터 유형은 INTEGER여야 합니다. |
428F3 | SCROLL과 WITH RETURN은 함께 사용할 수 없습니다. |
428F4 | FETCH문에 지정된 SENSITIVITY는 이 커서에 사용할 수 없습니다. |
428F6 | 커서가 화면 이동 커서이지만, 결과 테이블에 테이블 함수의 출력이 포함됩니다. |
428F7 | SQL 루틴에만 적용하는 조작이 외부 루틴에서 시도되었습니다. |
428F9 | 이 컨텍스트에서는 시퀀스 표현식을 지정할 수 없습니다. |
428FA | 10진수의 스케일은 0이어야 합니다. |
428FB | sequence-name은 식별 컬럼용으로 시스템이 생성한 시퀀스여서는 안됩니다. |
428FC | ENCRYPTION PASSWORD의 길이가 유효하지 않습니다. |
428FD | 암호 해독에 사용된 암호가 데이터를 암호화할 때 사용된 암호와 일치하지 않습니다. |
428FE | 이 데이터는 ENCRYPT 함수의 결과가 아닙니다. |
428FF | 버퍼 풀 스펙이 유효하지 않습니다. |
428FG | 스테이징 테이블을 정의하는 데 사용된 테이블이 유효하지 않습니다. |
428FH | SET INTEGRITY 옵션이 유효하지 않습니다. |
428FI | ORDER OF가 지정되었으나, 테이블 지정자에 ORDER BY절이 없습니다. |
428FJ | 뷰 또는 구체화된 쿼리 테이블의 외부 fullselect에서는 ORDER BY가 허용되지 않습니다. |
428FL | SQL 데이터 변경 명령문이 지정된 컨텍스트에서 허용되지 않습니다. |
428FM | SELECT 내의 INSERT문에 대칭 뷰가 아닌 뷰가 지정되었습니다. |
428FP | 주제 뷰에서 각 조작에 대해 하나의 INSTEAD OF 트리거가 허용됩니다. |
428FQ | INSTEAD OF 트리거는 WITH CHECK OPTION을 사용하여 정의된 뷰, WITH CHECK OPTION이 정의된 다른 뷰에 정의된 뷰 또는 WITH ROW MOVEMENT절을 사용하여 정의된 뷰에 중첩된 뷰를 지정해서는 안됩니다. |
428FU | FROM SQL 변환 함수 또는 메소드로부터 리턴된 내장 유형이 TO SQL 변환 함수 또는 메소드의 해당하는 내장 유형과 일치하지 않습니다. |
428FV | 메소드를 중첩 메소드로 정의할 수 없습니다. |
428FZ | 일부 조작에 대해서만 정의된 INSTEAD OF 트리거가 있는 뷰는 MERGE문에서 목표로 사용할 수 없습니다. |
428G3 | fullselect에서 SQL 데이터 변경 명령문의 목표 뷰에 INSTEAD OF 트리거가 정의되어 있는 경우 최종 테이블은 유효하지 않습니다. |
428G4 | INPUT SEQUENCE 순서가 잘못 사용되었습니다. |
428G5 | UPDATE문의 지정 절은 INCLUDE 컬럼이 아닌 컬럼을 최소한 하나 이상 지정해야 합니다. |
428G6 | fullselect의 FROM절에서 데이터 변경 명령문의 목표로부터 선택할 수 없는 컬럼이 지정되었습니다. |
428G8 | 뷰를 쿼리 최적화에 사용할 수 없습니다. |
428GA | 페더레이티드 옵션은 추가, 삭제 또는 변경될 수 없습니다. |
42901 | 컬럼 함수에 컬럼 이름이 포함되어 있지 않습니다. |
42903 | WHERE절이나 SET절에 컬럼 함수와 같은 유효하지 않은 참조가 들어 있습니다. |
42904 | 컴파일 오류로 인해 SQL 프로시저를 작성할 수 없습니다. |
42907 | 문자열이 너무 깁니다. |
42908 | 명령문에 필요한 컬럼 목록이 포함되어 있지 않습니다. |
42910 | 명령문이 복합 명령문에서 허용되지 않습니다. |
42911 | 10진수 나눗셈 조작의 결과로 스케일이 음수가 되므로, 10진수 나눗셈 조작은 유효하지 않습니다. |
42912 | 컬럼이 커서의 SELECT문의 UPDATE절에서 식별되지 않으므로, 이 컬럼을 갱신할 수 없습니다. |
42914 | 서브쿼리에서 참조되는 테이블이 조작에 의해 영향을 받을 수 있으므로, DELETE가 유효하지 않습니다. |
42915 | 유효하지 않은 참조 제한조건이 발견되었습니다. |
42916 | 별명을 작성하면 별명이 반복적인 체인을 이루므로 별명을 작성할 수 없습니다. |
42917 | 오브젝트를 명시적으로 삭제 또는 변환할 수 없습니다. |
42918 | 사용자 정의 데이터 유형(UDT)을 시스템 정의 데이터 유형(예: INTEGER) 이름으로 작성할 수 없습니다. |
42919 | 중첩된 복합 명령문은 허용되지 않습니다. |
42921 | 테이블 스페이스에 컨테이너를 추가할 수 없습니다. |
42925 | 반복적인 이름 지정된 파생된 테이블(derived table)은 SELECT DISTINCT를 지정할 수 없으며, UNION ALL을 지정해야 합니다. |
42928 | 테이블에 대해 WITH EMPTY TABLE을 지정할 수 없습니다. |
42932 | 프로그램 준비 가정(assumption)이 올바르지 않습니다. |
42939 | 지정된 ID는 시스템에서 사용하기 위해 예약되어 있으므로, 이름을 사용할 수 없습니다. |
42961 | 지정된 서버 이름이 현재 서버와 일치하지 않습니다. |
42962 | 긴 컬럼, LOB 컬럼 또는 구조화된 유형은 인덱스, 키 또는 제한조건에서 사용될 수 없습니다. |
42968 | 현재 소프트웨어 라이센스가 없기 때문에 연결에 실패했습니다. |
42969 | 패키지가 작성되지 않았습니다. |
42972 | 조인 조건 또는 MERGE문의 ON절에서 표현식은 둘 이상의 피연산자 테이블의 컬럼을 참조합니다. |
42985 | 명령문이 루틴에서 허용되지 않습니다. |
42987 | 명령문이 프로시저 또는 트리거에서 허용되지 않습니다. |
42989 | 표현식을 기본으로 한 GENERATED 컬럼은 BEFORE 트리거에서는 사용될 수 없습니다. |
42991 | BOOLEAN 데이터 유형은 현재 내부적으로만 지원됩니다. |
42993 | 컬럼이 정의될 때, 너무 길어서 로그할 수 없습니다. |
42994 | 원시 디바이스(raw device) 컨테이너는 지원되지 않습니다. |
42995 | 요청된 함수가 전역 임시 테이블에 적용되지 않습니다. |
42997 | 기능이 이 버전의 DB2 응용프로그램 리퀘스터, DB2 응용프로그램 서버 또는 이 둘의 조합에서 지원하지 않습니다. |
429A0 | 외부 키는 처음에 로그지 않으므로 정의된 상위 테이블을 참조할 수 없습니다. |
429A1 | 노드 그룹이 테이블 스페이스에 유효하지 않습니다. |
429A9 | DataJoiner가 SQL문을 처리할 수 없습니다. |
429B2 | 구조화된 유형 또는 컬럼에 지정된 인라인 길이 값이 너무 작습니다. |
429B3 | 오브젝트가 서브테이블에서 정의되지 않을 수도 있습니다. |
429B4 | 데이터 필터 함수는 LANGUAGE SQL 함수가 될 수 없습니다. |
429B5 | 인덱스 확장에서 인스턴스 매개변수의 데이터 유형이 유효하지 않습니다. |
429B8 | PARAMETER STYLE JAVA에 정의된 루틴은 매개변수 또는 리턴 유형으로서 구조화된 유형을 가질 수 없습니다. |
429B9 | 속성을 지정할 때 DEFAULT 또는 NULL을 사용할 수 없습니다. |
429BA | FEDERATED 키워드는 페더레이티드 데이터베이스 오브젝트에 대한 참조와 함께 사용되어야 합니다. |
429BB | 매개변수 또는 변수에 대해 지정된 데이터 유형이 SQL 루틴에서는 지원되지 않습니다. |
429BC | ALTER TABLESPACE문에 여러 개의 컨테이너 조치가 있습니다. |
429BE | 기본 키 또는 고유 키가 차원 절에서 컬럼의 서브세트입니다. |
429BG | 함수는 범위 클러스터 테이블에서 지원되지 않습니다. |
429BJ | 뷰에서 WITH ROW MOVEMENT가 잘못 사용되었습니다. |
429BK | 행 이동에 하위 뷰가 포함되므로 뷰 갱신 시도가 유효하지 않습니다. |
429BL | SQL 데이터를 수정하는 함수가 올바르지 않은 컨텍스트에서 호출되었습니다. |
429BO | 페더레이티드 데이터 소스에 대한 플랜이 작성 가능하지 않습니다. |
429BP | 별칭 계산 결과 컬럼이 유효하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
44000 | 결과 행이 뷰 정의를 충족시키지 않으므로, 삽입이나 갱신 조작이 허용되지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
46001 | Java DDL - 유효하지 않은 URL. |
46002 | Java DDL - 유효하지 않은 jar 이름. |
46003 | Java DDL - 유효하지 않은 클래스 삭제. |
46007 | Java DDL - 유효하지 않은 시그니처. |
46008 | Java DDL - 유효하지 않은 메소드 스펙. |
46103 | Java 루틴에 ClassNotFound 예외가 발생했습니다. |
46501 | Java DDL - 선택적 구성요소가 구현되지 않았습니다. |
SQLSTATE 값 | 의미 |
---|---|
51002 | SQL문 실행 요청에 해당되는 패키지가 없습니다. |
51003 | 일관성 토큰이 일치하지 않습니다. |
51004 | SQLDA의 주소가 유효하지 않습니다. |
51005 | 이전 시스템 오류로 인해 이 기능이 작동 불가능하게 되었습니다. |
51008 | 프리컴파일된 프로그램의 릴리스 번호가 유효하지 않습니다. |
51015 | 바인드 시 오류가 발견된 섹션을 실행하려고 했습니다. |
51017 | 사용자가 로그온되지 않았습니다. |
51021 | 응용프로그램 프로세스에서 롤백 작업을 처리할 때까지 SQL문을 실행할 수 없습니다. |
51022 | CONNECT문에 이름 지정된 서버로의 연결(현재 또는 비활동)이 이미 존재하면, 권한 부여 이름을 지정하는 CONNECT가 유효하지 않습니다. |
51023 | 데이터베이스가 데이터베이스 관리 프로그램의 다른 인스턴스에서 이미 사용 중입니다. |
51024 | 뷰가 작동 불능으로 표시되어, 이를 사용할 수 없습니다. |
51025 | XA 트랜잭션 처리 환경의 응용프로그램은 SYNCPOINT TWOPHASE로 바인드되지 않습니다. |
51026 | 이벤트 모니터의 목표 경로를 이미 다른 이벤트 모니터에서 사용 중이므로, 이 이벤트 모니터를 작동시킬 수 없습니다. |
51027 | 테이블이 사용자 유지보수 구체화된 쿼리 테이블이거나, 점검 보류 상태가 아니므로 SET INTEGRITY문의 IMMEDIATE CHECKED 옵션이 유효하지 않습니다. |
51028 | 패키지가 작동 불능으로 표시되어 이를 사용할 수 없습니다. |
51030 | ALLOCATE CURSOR 또는 ASSOCIATE LOCATORS문에서 참조되는 프로시저가 응용프로그램 프로세스에서 호출되지 않았습니다. |
51034 | MODIFIES SQL DATA로 정의된 루틴이 이 루틴이 호출된 컨텍스트에서 유효하지 않습니다. |
51035 | 이 세션에서 시퀀스에 대해 값이 생성되지 않았으므로 PREVVAL 표현식을 사용할 수 없습니다. |
51038 | 루틴에서 더 이상 SQL문을 발행하지 못할 수 있습니다. |
51039 | ENCRYPTION PASSWORD 값이 설정되지 않았습니다. |
51040 | 유효하지 않은 컴파일 환경. |
SQLSTATE 값 | 의미 |
---|---|
53040 | 지정된 버퍼 풀이 지정된 데이터베이스 파티션에 존재하지 않습니다. |
53090 | 하나의 코드화 체계(ASCII, EBCDIC 또는 유니코드)의 데이터만 같은 SQL문에서 참조될 수 있습니다. |
53091 | 지정된 코드화 체계가 포함하는 오브젝트에 현재 사용 중인 코드화 체계와 동일하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
54001 | 명령문이 너무 길거나 너무 복잡합니다. |
54002 | 문자열 상수가 너무 깁니다. |
54004 | 명령문에 테이블 이름이 너무 많거나 SELECT 또는 INSERT 목록에 항목이 너무 많습니다. |
54006 | 병합의 결과가 너무 깁니다. |
54008 | 키가 너무 길거나 키에 너무 많은 컬럼이 있거나 키 컬럼이 너무 깁니다. |
54010 | 테이블의 레코드 길이가 너무 깁니다. |
54011 | 테이블이나 뷰에 대해 컬럼이 너무 많이 지정되었습니다. |
54023 | 함수 또는 프로시저에 대한 매개변수나 인수의 수에 대한 한계가 초과되었습니다. |
54028 | 최대 동시 LOB 핸들 수에 도달했습니다. |
54029 | 최대 열린 디렉토리 스캔 수에 도달했습니다. |
54030 | 최대수의 이벤트 모니터가 이미 사용 중입니다. |
54031 | 최대 파일 수가 이벤트 모니터에 이미 지정되었습니다. |
54032 | 최대 테이블 크기에 도달했습니다. |
54033 | 최대 파티션 맵의 수에 도달했습니다. |
54034 | 테이블 스페이스에 대한 모든 컨테이너 이름의 길이 합계가 너무 깁니다. |
54035 | 내부 오브젝트 한계를 초과했습니다. |
54036 | 컨테이너 또는 스토리지 경로의 경로 이름이 너무 깁니다. |
54037 | 테이블 스페이스에 대한 컨테이너 맵(map)이 너무 복잡합니다. |
54038 | 중첩된 루틴 또는 트리거의 최대 용량을 초과했습니다. |
54045 | 유형 계층 구조의 최대 레벨을 초과했습니다. |
54046 | 인덱스 확장에서 허용된 최대 매개변수가 초과되었습니다. |
54047 | 테이블 스페이스의 최대 크기에 도달했습니다. |
54048 | 페이지 크기가 충분한 임시 테이블 스페이스가 없습니다. |
54049 | 구조화된 유형의 인스턴스 길이가 시스템 한계를 초과합니다. |
54050 | 구조화된 유형에서 최대 허용 속성이 초과되었습니다. |
54052 | 버퍼 풀의 블록 페이지 수가 버퍼 풀의 크기에 비해 너무 큽니다. |
54053 | BLOCKSIZE에 지정된 값이 유효한 범위내에 있지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
55001 | 데이터베이스를 이주해야 합니다. |
55002 | 설명 테이블이 적절하게 정의되어 있지 않습니다. |
55006 | 오브젝트는 현재 같은 응용프로그램 프로세스에서 사용 중이므로 삭제할 수 없습니다. |
55007 | 오브젝트는 현재 같은 응용프로그램 프로세스에서 사용 중이므로 변경할 수 없습니다. |
55009 | 시스템이 읽기 전용 파일 또는 쓰기 보호된 디스켓에 쓰려고 했습니다. |
55012 | 클러스터링 인덱스가 이미 테이블에 있습니다. |
55019 | 테이블이 조작에 유효하지 않은 상태입니다. |
55022 | 파일 서버가 데이터베이스에 등록되지 않았습니다. |
55023 | 루틴을 호출할 때 오류가 발생했습니다. |
55024 | 테이블 관련 데이터가 다른 테이블 스페이스에도 있기 때문에 이 테이블 스페이스를 삭제할 수 없습니다. |
55025 | 데이터베이스를 재시작해야 합니다. |
55026 | 임시 테이블 스페이스는 삭제할 수 없습니다. |
55031 | 오류 맵핑 파일의 형식이 올바르지 않습니다. |
55032 | 이 응용프로그램이 시작된 이후 데이터베이스 관리 프로그램이 중지되었기 때문에 CONNECT문은 유효하지 않습니다. |
55033 | 이벤트 모니터가 작성 또는 수정된 같은 작업 단위(UOW)에서 이벤트 모니터를 활성화할 수 없습니다. |
55034 | 이벤트 모니터가 조작에 유효하지 않은 상태입니다. |
55035 | 테이블이 보호되어 있으므로 삭제할 수 없습니다. |
55036 | 노드가 파티션 맵에서 제거되지 않았기 때문에 삭제할 수 없습니다. |
55037 | 테이블이 다중 노드로 구성된 노드 그룹에 있기 때문에 파티션 키를 삭제할 수 없습니다. |
55038 | 노드 그룹은 재조정(rebalance)되는 중이므로 사용할 수 없습니다. |
55039 | 테이블 스페이스가 적절한 상태에 있지 않기 때문에 액세스 또는 상태 변화가 허용되지 않습니다. |
55041 | 재조정이 수행되는 동안에는 컨테이너를 테이블 스페이스에 추가할 수 없습니다. |
55043 | 구조화된 유형에 근거하는 유형이 지정된 테이블 또는 유형이 지정된 뷰가 있는 경우 이러한 유형의 속성은 변경할 수 없습니다. |
55045 | 필요한 구성요소가 서버에서 사용 가능하지 않으므로 루틴에 대한 SQL 아카이브(SAR) 파일을 작성할 수 없습니다. |
55046 | 지정된 SQL 아카이브가 목표 환경과 일치하지 않습니다. |
55047 | 외부 함수 또는 메소드가 페더레이티드 오브젝트에 액세스하려고 했습니다. |
55048 | 암호화된 데이터는 암호화할 수 없습니다. |
55049 | 이벤트 모니터 테이블이 제대로 정의되지 않았습니다. |
55051 | ALTER BUFFERPOOL문이 현재 진행 중입니다. |
55054 | 메소드를 중첩 메소드로 정의할 수 없습니다. |
55056 | 데이터베이스를 페더레이션에 사용할 수 없으므로 별칭 통계를 갱신할 수 없습니다. |
55060 | 데이터베이스에 대해 자동 스토리지가 정의되지 않았습니다. |
55061 | 자동 스토리지 테이블 스페이스의 경로 재지정 리스토어가 허용되지 않습니다. |
55062 | 자동 스토리지에 데이터베이스를 사용할 수 없기 때문에 스토리지 경로가 제공될 수 없습니다. |
SQLSTATE 값 | 의미 |
---|---|
56031 | 이 시스템에서는 혼합 및 DBCS 데이터가 지원되지 않기 때문에 절 또는 스칼라 함수는 유효하지 않습니다. |
56033 | Long 문자열 컬럼의 삽입 또는 갱신 값은 호스트 변수 또는 널(NULL)이어야 합니다. |
56038 | 이 환경에서는 요청된 기능이 지원되지 않습니다. |
56072 | 후속 SQL문을 실행하는 데 영향을 미치지 못하는 하위 레벨 서버에서 지원하지 않는 함수로 인해 실행하지 못했습니다. |
56084 | LOB 데이터는 DRDA에서 지원되지 않습니다. |
56091 | 복합 SQL문의 실행 결과로 여러 가지 오류가 발생했습니다. |
56092 | 인증 이름이 사용자 ID 또는 그룹 ID이기 때문에 인증 유형을 판별할 수 없습니다. |
56095 | 바인드 옵션이 유효하지 않습니다. |
56097 | LONG VARCHAR와 LONG VARGRAPHIC 필드는 DEVICE에서 빌드된 TABLESPACE에서 허용되지 않습니다. |
56098 | 내재 리바인드 또는 준비 중에 오류가 발생했습니다. |
56099 | REAL 데이터 유형은 목표 데이터베이스에서 지원하지 않습니다. |
560A0 | LOB 값에 대한 조치가 실패했습니다. |
560AA | 이 시스템에서는 UCS-2가 지원되지 않기 때문에 절 또는 스칼라 함수는 유효하지 않습니다. |
560AC | 지정된 유형 또는 데이터 소스 버전에 대해서는 랩퍼 정의를 사용할 수 없습니다. |
560AF | 게이트웨이 집중기를 사용할 때 PREPARE문이 지원되지 않습니다. |
560B0 | 테이블 스페이스 또는 테이블 스페이스 컨테이너 크기 재지정에 대해 새 크기 값이 유효하지 않습니다. |
560B1 | 스토어드 프로시저에 유효하지 않은 커서 스펙이 있습니다. |
560B7 | 복수 행 INSERT의 경우, 시퀀스 표현식의 사용법은 각 행에 대해 동일해야 합니다. |
560BB | 동적으로 준비되는 CALL문의 INOUT 매개변수에서는 USING절과 INTO절에 같은 호스트 변수를 사용해야 합니다. |
560BC | 파일에 액세스하는 중에 오류가 발생했습니다. |
560BD | 페더레이티드 서버가 데이터 소스에서 예기치 않은 오류 코드를 수신했습니다. |
560BF | 암호화 기능이 사용 불가능합니다. |
560C0 | 유니코드 코드화 체계로 작성된 테이블은 SQL 함수 또는 SQL 메소드에 사용할 수 없습니다. |
560C1 | 유니코드 코드화 체계로 작성된 테이블은 유형이 지정된 테이블이 되거나, 그래픽 유형 또는 사용자 정의 유형을 포함할 수 없습니다. |
560C2 | 삭제된 테이블에 대한 실행기록 파일 항목을 쓰는 데 실패했습니다. |
560C3 | 이후 트리거는 INSERT문에 삽입 중인 행을 수정할 수 없습니다. |
560C6 | 참조 제한조건이 fullselect 내의 SQL 데이터 변경 명령문에서 수정한 행을 수정할 수 없습니다. |
560C8 | 일부 별칭 통계를 갱신할 수 없습니다. |
560C9 | 지정된 명령문을 설명할 수 없습니다. |
560CA | SQL문이 현재 데이터베이스 파티션에서만 실행될 수 있는 루틴을 참조합니다. |
SQLSTATE 값 | 의미 |
---|---|
57001 | 테이블에 1차 인덱스가 없기 때문에 이 테이블을 사용할 수 없습니다. |
57003 | 지정된 버퍼 풀이 활성화되지 않았습니다. |
57007 | DROP 또는 ALTER가 보류 중이므로 오브젝트를 사용할 수 없습니다. |
57009 | 가상 스토리지 또는 데이터베이스 자원이 임시로 사용 불가능하게 되었습니다. |
57011 | 가상 스토리지 또는 데이터베이스 자원을 사용할 수 없습니다. |
57012 | 데이터베이스가 아닌 다른 자원을 사용할 수 없습니다. 이는 후속 명령문의 정상적인 실행에 영향을 주지 않습니다. |
57013 | 데이터베이스가 아닌 다른 자원을 사용할 수 없습니다. 이는 후속 명령문의 정상적인 실행에 영향을 주지 않습니다. |
57014 | 처리가 요청된 대로 취소되었습니다. |
57016 | 테이블이 활성화되지 않으므로 액세스할 수 없습니다. |
57017 | 문자 변환이 정의되지 않았습니다. |
57019 | 자원 문제점으로 인해 명령문이 실패했습니다. |
57020 | 데이터베이스가 들어 있는 드라이브가 잠겨 있습니다. |
57021 | 디스켓 드라이브 문이 열려 있습니다. |
57022 | 명령문의 권한 부여 ID가 적절한 DB 스페이스를 소유하지 않으므로 테이블을 작성할 수 없습니다. |
57030 | 응용프로그램 서버(AS)로의 연결이 정의된 설치 한계를 초과했습니다. |
57032 | 최대수의 동시 데이터베이스가 시작되었습니다. |
57033 | 자동 롤백 없이 교착 상태 또는 시간종료가 발생했습니다. |
57036 | 트랜잭션 로그가 현재 데이터베이스에 속하지 않습니다. |
57046 | 데이터베이스 또는 인스턴스가 Quiesce 상태이기 때문에 새로운 트랜잭션을 시작할 수 없습니다. |
57047 | 디렉토리에 액세스할 수 없기 때문에 내부 데이터베이스 파일을 작성할 수 없습니다. |
57048 | 테이블 스페이스에 대한 컨테이너에 액세스하는 동안 오류가 발생했습니다. |
57049 | 운영 체제 프로세스 한계에 도달했습니다. |
57050 | 파일 서버가 현재 사용 가능하지 않습니다. |
57051 | 계산된 CPU 비용이 자원 한계를 초과합니다. |
57052 | 노드에 모든 임시 테이블 스페이스에 대한 컨테이너가 없으므로 이 노드를 사용할 수 없습니다. |
57053 | 조작이 충돌되므로 테이블에서 조작을 수행할 수 없습니다. |
57055 | 페이지 크기가 충분한 임시 테이블 스페이스를 사용할 수 없습니다. |
57056 | 데이터베이스가 NO PACKAGE LOCK 모드에 있으므로 패키지를 사용할 수 없습니다. |
57057 | SQL문 DRDA 체인의 이전 상태로 인해 SQL문을 실행할 수 없습니다. |
57059 | 테이블 스페이스에 지정된 조치에 사용할 수 있는 스페이스가 충분하지 않습니다. |
SQLSTATE 값 | 의미 |
---|---|
58004 | 시스템 오류(후속 SQL문을 정상적으로 실행할 수는 있음)가 발생했습니다. |
58005 | 시스템 오류(후속 SQL문을 정상적으로 실행하지 못하게 함)가 발생했습니다. |
58008 | 후속 DDM 명령 또는 SQL문의 정상적인 실행에는 영향을 주지 않는 분산 프로토콜 오류로 인해 실행에 실패했습니다. |
58009 | 대화가 할당해제되게 만드는 분산 프로토콜 오류로 인해 실행에 실패했습니다. |
58010 | 후속 DDM 명령 또는 SQL 문의 정상적인 실행에 영향을 주는 분산 프로토콜 오류로 인해 실행에 실패했습니다. |
58011 | 바인드 프로세스가 진행되는 동안 DDM 명령이 유효하지 않습니다. |
58012 | 지정된 패키지명과 일치하는 토큰을 사용한 바인드 프로세스가 실행 중이 아닙니다. |
58014 | DDM 명령이 지원되지 않습니다. |
58015 | DDM 오브젝트가 지원되지 않습니다. |
58016 | DDM 매개변수가 지원되지 않습니다. |
58017 | DDM 매개변수 값이 지원되지 않습니다. |
58018 | DDM 응답 메시지가 지원되지 않습니다. |
58023 | 시스템 오류로 인해 현재 프로그램이 취소되었습니다. |
58030 | 입출력 오류가 발생했습니다. |
58031 | 시스템 오류로 인해 연결에 실패했습니다. |
58032 | 분리 모드 사용자 정의 함수(UDF)에 대한 프로세스를 사용할 수 없습니다. |
58034 | DMS 테이블 스페이스에서 오브젝트에 대한 페이지를 찾는 중에 오류가 발견되었습니다. |
58035 | DMS 테이블 스페이스에서 오브젝트에 대한 빈 페이지를 찾는 중에 오류가 발견되었습니다. |
58036 | 지정된 내부 테이블 스페이스 ID가 없습니다. |
ZZZZZ | 플레이스 홀더 sqlstate는 개발용으로만 사용하십시오. 코드 이동 전 변경해야 합니다. |
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
| |||||||||
.................................................... | |||||||||
- 내 삶에 좌우명 생활인과 음악인의 환상적인 균형을 통한 조화로운 삶 - 일상적인 생활 중에 일어나는 시간과 자는 시간 - 내가 만약 정치인이 된다면 하고 싶은 일과 해야 할 일 - 훗날 내가 어떤 뮤지션으로 대중들에게 기억되었으면 하는가? - 십년쯤 흘렀다고 잠시 상상해본다면 나는 어느 자리에서 무엇을 하고 있을까? - 선배 뮤지션 중에 좋아하는 사람과 존경하는 사람은 누구인가? - 나의 아들과 딸이 이 세상에서 어떤 사람으로 자라주었으면 하는가? - 하루 중에 온전하게 혼자만 있는 시간은 얼마나 되는지... 또 그러한 시간엔 무엇을 하는지? - 만약 1주일쯤 혼자 여행할 수 있는 기회가 주어진다면, 무엇을 가지고 어디로 가고 싶은지? - 최근에 가장 재미있게 본 영화나 책은 무엇인지... - 마음먹은 대로 일이 풀리지 않을 때나 상대방과 의사소통이 제대로 이루어지지 않을 때는 어떻게 하는지... 또 예기치 않은 장애물을 만났을 때 나의 해결 방법은? 또, 그러할 때는 누구와 의논을 하는가? - 낯선 사람을 소개 받을 때, 그 사람의 어디를, 무엇을, 먼저 보게 되는지? - 어릴 적 꿈은 무엇이었나? 또 어린 시절에 좋아했던 일은? - 무엇을 할 때 나는 행복한가? - 나의 별명? 그리고 별명이 이유는? - 노래를 할 때에 가장 신경 쓰이는 것은? - 즐겨하는 음식과 멀리하는 음식은? - 공연을 다닐 때에 차 안에서 하는 일은? - 곡을 만들 때에 특이한 습관이나 버릇이 있다면? - 나의 하루는 어떻게 시작되는가? - 나에게 콤플렉스, 징크스가 있다면? - 고등학교 시절 최악의 성적은? - 살아오면서 여성이 부러울 때가 있다면? - 오랫동안 기억에 남은 친구가 있다면? - 내가 생각하는 천원으로 행복해지는 방법? - 지금 가장 하고 싶은 일은? - 지금 생각하고 있는 불만은? - 내 옷장에 있는 청바지는 몇 벌 정도? 그 중에서 가장 오래된 청바지는? - 가장 최근에 눈시울을 적셨던 적은? - 청년시절 해보았던 아르바이트는? 그리고 그 시절의 짧은 단상 하나 - 키/ 170cm 몸무게/ 65kg 혈액형/ O형 발크기/ 260mm
|
나뭇잎에 가려진 하늘을 보았다..
자동차는 나뭇잎에 어른어른...
하늘가 저 멀리엔 내 마음이 어른어른..
답답한 시선이 하늘에 닿았다...
하늘처럼 끝없는 일들...
하늘은 흐리다.