블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

    2008. 10. 30. 20:29 개발/DB2
    난이도 : 초급

    Paul Yip, Database Consultant, IBM Toronto Lab


    2003 년 8 월 28 일

    Windows, UNIX, 리눅스 플랫폼용 DB2 Universal Database에서 SQL을 사용하여 날짜, 시간, 타임스탬프를 조작하는 방법을 설명한다.
    © 2002 International Business Machines Corporation. 저작권 소유.

    알림:이 글을 읽기 전에 디스클레이머를 읽기 바란다.
    IBM® DB2® Universal DatabaseTM에 관한 글이다.

    머리말

    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() 함수는 여러 포맷들을 허용한다. 위 포맷은 단순한 예제일 뿐이다. 독자 여러분이 스스로 해 보길 바란다.

    경고:
    DB2 UDB V8.1 SQL Cookbook (Graeme Birchall) 발췌 (http://ourworld.compuserve.com/homepages/Graeme_Birchall).

    DATE 함수에서 쿼트를 없애면 어떻게 될까? 함수는 여전히 작동하겠지만 정확하지 않은 DATE가 나올 것이다.



    SELECT DATE(2001-09-22) FROM SYSIBM.SYSDUMMY1;



    결과:


    ======
    05/24/0006




    위 결과에서 어떻게 2000년 이나 차이가 났을까? DATE 함수가 입력으로 문자열을 취하면 DB2 날짜의 유효 문자로 간주되고, 따라서 이를 변환하는 것이다. 반대로, 입력이 숫자라면 이 함수는 현재 년도(0001-01-01)에서 1을 제한 날 수를 나타내는 것으로 간주한다. 위 쿼리에서 입력은 2001-09-22였고 이것은 (2001-9)-22과 동일하다. 또한 이것은 1970이다.





    위로




    날짜 함수

    가끔씩, 두 개의 타임스탬프들이 어떻게 차이가 있는지 알아야 한다. 이를 위해 DB2는 TIMESTAMPDIFF()라고 하는 빌트인 함수를 제공한다. 하지만 리턴된 값은 근사값이다. 윤년을 고려하지 않고 한 달을 30일로만 가정하기 때문이다. 다음은 두 날짜들 간 차이를 찾아내는 방법이다.


    timestampdiff (, char(
    timestamp('2002-11-30-00.00.00')-
    timestamp('2002-11-08-00.00.00')))



    의 자리에, 다음 값들을 사용하여 시간 단위를 나타낸다.

    1 = 초의 소수부분
    2 = 초
    4 = 분
    8 = 시간
    16 = 요일
    32 = 주
    64 = 달
    128 = 분기
    256 = 년
    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

    SYSADM 권한을 가진 사용자로서 OS 쉘에서 데이터베이스로 연결한다
    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,' ') ||
    ' not recognized.'
    end
    from tmp



    이 함수 코드는 복잡해보인다. 하지만 자세히 살펴보면 매우 단순하면서도 좋은 코드임을 알 수 있다. 우선, common table expression (CTE)를 사용하여 타임스탬프(첫 번째 입력 매개변수)를 개별 컴포넌트에서 분리한다. 그런 다음, 제공된 포맷(두 번째 입력 매개변수)을 검사하고 요청된 포맷과 부분을 사용하여 타임스탬프를 다시 정렬한다. 이 함수는 매우 유연하다. 또 다른 패턴을 추가하려면 원하는 포맷과 함께 WHEN 구문을 붙이면 된다. 예상하지 못했던 패턴이 나타났다면 에러메시지가 리턴된 것이다.

    사용 예제:


    values ts_fmt(current timestamp,'yyyymmdd')
    '20030818'
    values ts_fmt(current timestamp,'asa')
    'date format asa not recognized.'
    posted by 좋은느낌/원철
    2008. 10. 30. 18:50 개발/DB2

    안녕하세요.
    다국어지원 홈페이지를 만들어야 하는데 어떻게 해야할지 방향이 잡히지 않아 글을 올립니다.

    아래의 내용은 제가 그냥 테스트해본 후 적어본 것입니다.
    1. 울트라에디터에서 아래의 내용을 입력한 후 UTF-8코드로 저장하여 ,
       브라우저에서 불러오면 정상적으로 보임
       <meta http-equiv="content-type" content="text/html;charset=utf-8">  
       테스트
      
    2. 위의 파일내용에서 charset부분만  EUC-KR로 변경한후 브라우저에서 불러오면 깨져보임

    3. character set이 KO16MSWIN949인 오라클에 UTF-8코드로 변환된 문자를 입력하면
       TOAD툴에서 select시 깨져보이고, select한 자료를 확장자가 html파일로 저장한 후,
       브라우저에서 읽어들이면 인코딩을 UTF-8설정해도 깨져보임.
      
    4. character set이 UTF-8인 오라클에 한글을 입력하면 TOAD툴에서 select시 정상적으로 보이나,
       조회한 내용을 확장자가 html인 파일로 저장하여 브라우저에서 UTF-8코드로 인코딩하여보면
       깨져보임. 그러나 EUC-KR로 인코딩하여 보면 정상적임.
      
    5. character set이 UTF-8인 오라클에 직접 UTF-8코드로 인코딩한 한글을 입력한후,
       TOAD툴에서 select하면 깨져보임. 입력된 자료를 파일로 만들어 UTF-8코드로
       웹브라우저에서 읽어봐도 역시 깨져보임.
      
    어거저거 테스트해보는데 정리가 되지 않습니다.-.-;;
    제가 궁금한 것은,
    1. character set이 UTF-8인 오라클 데이타베이스에서 한글을 insert문으로 입력시
       오라클이 자동으로 UTF-8코드로 변환하여 테이블에 입력하여 주고,
       저장된 내용을 파일로 만들기 위해 select할때에는 자동으로 UTF-8코드를 한글코드로 변환해주나요?
      
    2. 하나의 웹페이지 테이블내에 일본어, 중국어, 러시아어등등 여러국가의 언어를 표시해야 하는
       웹서버를 구축하려 할때 어떤방식으로 데이타베이스를 생성하고, 자료를 입출력해야하는지 궁금합니다.

    이와 관련된 일을 해보신 분은 도움주시면 고맙겠습니다.
    맛있는 식사도 대접하겠습니다.^^

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

    제가 알고 있는 사항을 말씀드리겠습니다.


    1. character set 은 다국어 지원을 위해서는 UTF-8 / AL32UTF8 이어야 합니다.

    2. oracle서버와 client-server 환경일 경우에는 client의 nls_lang설정에 따라 문자열의 값이

        UTF-8로 conversion되어 주고 받게 됨으로 client의 nls_lang설정이 중요합니다.

        토드에서의 테스트가 이경우 입니다.

    3. 웹브라우저의 경우 소스파일이 unicode로 저장되어야 하며

        <meta http-equiv="content-type" content="text/html;charset=utf-8"> 로 설정해

        사용하는 문자열을 unicode로 하여야 합니다.

    4. oracle과의 연결객체 jdbc나 windows의 ado-connection등이 unicode string을 지원해야 합니다.


    이런 조건이 만족된다면 웹을 통한 server page에서 저장된 문자열은 utf-8로 저장되며

    저장된 문자열중 한글은 toad와 같은 툴을 통해서 ( 물론 client nls_lang=ko16ksc5601혹은 ko16mswin949 ) 정상적으로 확인이 가능합니다.

    posted by 좋은느낌/원철
    2008. 10. 25. 20:12 개발/JavaScript

    자바스크립트 날짜 계산 함수

    <script language="JavaScript">
    <!--
    /**
     param date : Date Objeet
     return string "YYYYMMDD"
     usage : getDateObjToStr(new Date());
    */
    function getDateObjToStr(date){
     var str = new Array();

     var _year = date.getFullYear();
     str[str.length] = _year;
     
     var _month = date.getMonth()+1;
     if(_month < 10) _month = "0"+_month;
     str[str.length] = _month;
     
     var _day = date.getDate();
     if(_day < 10) _day = "0"+_day;
     str[str.length] = _day
     var getDateObjToStr = str.join("");

     return getDateObjToStr;
    }

    /**
     getDateObjToStr 함수 필요
     return Today "YYYYMMDD"
    */
    function getToday(){
     var d = new Date();
     var getToday = getDateObjToStr(d);
     return getToday;
    }

    /**
     데이트 계산 함수
     param date : string "yyyymmdd"
     param period : int
     param period_kind : string "Y","M","D"
     param gt_today : boolean
     usage : calcDate("20080205",30,"D");
    */
    function calcDate(date,period, period_kind,gt_today){

     var today = getToday();

     var in_year = date.substr(0,4);
     var in_month = date.substr(4,2);
     var in_day = date.substr(6,2);
     
     var nd = new Date(in_year, in_month-1, in_day);
     if(period_kind == "D"){
      nd.setDate(nd.getDate()+period);
     }
     if(period_kind == "M"){
      nd.setMonth(nd.getMonth()+period);
     }
     if(period_kind == "Y"){
      nd.setFullYear(nd.getFullYear()+period);
     }
     var new_date = new Date(nd);
     var calcDate = getDateObjToStr(new_date);
     if(gt_today){ // 금일보다 큰 날짜 반환한다면
      if(calcDate > today){
       calcDate = today;
      }
     }
     return calcDate;
    }
    //-->
    </script>

    posted by 좋은느낌/원철
    2008. 10. 24. 10:27 개발/JavaScript
    <input type="text" name="txtTitle" size="90" maxlength="100" onKeyPress="if(event.keyCode == 13) return false;">

    posted by 좋은느낌/원철
    2008. 10. 20. 19:49 개발/DB2
    alter table TBNAME alter column COLNAME set data type varchar(7)


    VARCHAR만 잘 된다고 한다..

    다른 건 테이블 깨질 가능성 50%이상??

    DB2 이상하다...ㅜ.ㅡ
    posted by 좋은느낌/원철
    2008. 9. 26. 14:44 개발/DB2
    출처 : http://myoung76.tistory.com/60
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    사용법 기초 정리

    IBM DB2 EE 7.2.1
    Windows 2000 Advanced Server
    RAM 512MB

    IBM DB2 PE 8.1
    OS: RedHat 8.0
    Kernel: 2.4.20
    CPU: Celeron (Mendocino) 400MHz
    RAM: 160MB

    작성자: 강명규(kang@dbakorea.pe.kr)

    내가 테스트해본 것을 개인적으로 정리한 것이다.
    DB2는 하나의 인스턴스가 여러개의 데이터베이스를 가질 수 있다.
    MySQL, MS-SQL과 유사한 구성이라고 하겠다.


    [DB2 기초 정리]

    윈도에서 DB2를 설치하고 사용한 것을 정리한 것이다.
    프로그램의 위치등을 제외하면 리눅스등의 OS와 별 차이가 없을 것이다.

    설치디렉토리: C:\Program Files\SQLLIB
    등록된 사용자: db2admin (내 컴퓨터 - 관리 - 로컬 사용자 및 그룹 - 사용자)
    등록된 서비스: TCP/IP서비스(db2cDB2)가 C:\WINNT\system32\drivers\etc\services에 등록됨

    관리도구 - 서비스에 서비스들이 등록됨(자동시작되는 서비스는 o로 표시)
    (o) DB2 - DB2
    (o) DB2 - DB2CTLSV
    (o) DB2 - DB2DAS00
    (x) DB2 Governor
    (o) DB2 JDBC Applet Server
    (x) DB2 JDBC Applet Server - Control Center
    (o) DB2 License Server
    (o) DB2 Security Server


    DB2 Command실행 방법(콘솔)
    db2콘솔을 사용하려면 일단 db2환경을 꾸며줘야 하는데 윈도의 경우, db2cmd.exe를 실행해주면 되고,
    유닉스계열은 db2profile를 실행해주면 된다. 그런 후 db2명령을 사용할 수 있게 된다.
    아래 2가지 방법중 원하는 방식을 택해서 하면 되겠다.

    1. 명령프롬프트: 'db2cmd db2 get dbm cfg' 실행
    2. Command Window(명령창): 'db2 get dbm cfg' 실행 (시작 - 프로그램 - IBM DB2)
    3. Command Line Processor: 'get dbm cfg' 실행(시작 - 프로그램 - IBM DB2)

    db2cmd, db2명령은 각각 독립적으로 실행할 수도 있다.
    즉, db2cmd를 치고 나서, db2를 치고 나온 프롬프트에서 'get dbm cfg'를 실행해도 된다.
    'get dbm cfg'는 'get database manager configuration'로도 쓸 수 있다.
    이후부터 질의어는 3번째에 나온 Command Line Processor에서 작업한다고 가정하겠다.
    이 명령을 실행하면 앞에서 언급한 DB2의 TCP/IP서비스(svcename)인 db2cDB2도 발견할 수 있다.
    서비스명 db2cDB2를 다른 이름으로 변경하려면 다음과 같이 할 수 있다.(지금은 수정하지 마라)

    인스턴스명의 설정 변경 : db2 update dbm cfg using svcename server1

    서비스이름으로 지정된 server1은 C:\WINNT\system32\drivers\etc\services(유닉스는 /etc/services)
    에 설정되어 있으면 위와 같이 문자열로 써줘도 되고, 그렇지 않다면, 포트번호를 명시적으로 지정한다.
    이것은 클라이언트로부터 연결을 수용하는 포트로, 오라클 리스너의 수신포트와 같은 역활을 한다고 하겠다.
    클라이언트/서버 연결방법에 대해선 아래에서 다시 설명하겠다.


    1. 명령창
    DB2 종료 : db2stop (강제종료: db2stop force)
    DB2 시작 : db2start

    2. 관리도구 - 서비스
    DB2 - DB2서비스

    3. Control Center(제어센터) - GUI툴
    Instances하위의 DB2를 선택한 다음 우측클릭하여 컨텍스트메뉴중 Stop을 선택
    제어센터는 오라클의 DBAStudio나 EM, MS-SQL의 Enterprise Manager와 그 기능이 같다고 하겠다.
    인터페이스가 그리 좋은 건 아니지만, 초기에 관리작업을 여기서 시작하는 것이 수월할 것이다.

    질의어의 실행을 위해 제공되는 GUI툴은 명령센터이다.
    연습삼아, Script 편집창에서 다음 명령을 실행해 보라.

    create database testdb
    connect to testdb
    revoke createtab on database from public
    revoke bindadd on database from public
    grant dbadm on database to user db7dba1
    grant dbadm on database to user db7dba2


    *
    에러메시지에 대한 설명을 알아내기 위해 다음과 같이 한다.
    시작 - 프로그램 - IBM DB2 - Information - DB2 Information 을 실행
    웹페이지가 열리는데 Adminstration섹션의 Message Reference 라는 부분을 찾아서 링크를 클릭
    top,left,right프레임으로 된 페이지가 표시되는데 left프레임에서 SQL Messages라는 부분이 있다.
    여기서 SQL1000 - SQL1099부분을 선택하고, 이에 해당하는 내용이 표시된 우측프레임에서 SQL1025N을 찾는다.
    사실, 콘솔에서 ?다음 에러번호를 적어주는 것이 더 수월하다.

    D:\>db2set db2instance
    DB2

    D:\>db2set DB2COMM=tcpip

    D:\>db2stop
    SQL1064N  DB2STOP processing was successful.

    D:\>db2start
    SQL1063N  DB2START processing was successful.

    D:\>db2set DB2ADMINSERVER
    DB2DAS00

    D:\>db2set DB2COMM=tcpip -i DB2DAS00

    D:\>db2admin stop
    SQL4407W  The DB2 Administration Server was stopped successfully.  SQLSTATE=00000

    D:\>db2admin start
    SQL4406W  The DB2 Administration Server was started successfully.  SQLSTATE=00000


    D:\>type con >> "C:\WINNT\system32\drivers\etc\services"
    server1  3700/tcp # DB2 connection service port
    ^Z

    db2 => update database manager configuration using svcename server1
    db2 => db2stop
    db2 => db2start


    에러로그기록되는 곳
    C:\Program Files\SQLLIB\DB2\db2diag.log
    C:\Program Files\SQLLIB\DB2DAS00\db2diag.log



    리눅스에서 작업
    윈도에 설치된 DB2서버에 접속하는 클라이언트로서 사용한다고 가정하겠다.

    [root@linux root]# cat >> /etc/services
    server1  3700/tcp # DB2 connection service port

    [db2inst1@linux db2inst1]$ db2
    db2 => catalog tcpip node DB2 remote 192.168.0.1 server server1 (opp: uncatalog node db2)
    db2 => catalog database testdb at node db2 (opp: uncatalog database testdb )
    db2 => terminate ( to do cache flush: do it at another terminal )
    db2 => list node directory
    db2 => list db directory
    db2 => connect to testdb user Administrator xxxxxx (xxxxxx는 암호)
    db2 => disconnect testdb

    (에러) - 어떻게 하다보니 되던데 아마
    db2 => list tables      
    SQL0805N  Package "NULLID.SQLC2E03" was not found.  SQLSTATE=51002

    (조치)
    아래 내용을 root, db2inst1유저에서 각각 실행해줬다.
    둘 중에 하나만 하면 될 것 같은데.. 자세한 내용은 나중에 파악해야겠다.
    db2 connect to testdb user Administrator using xxxxxx
    cd /opt/IBM/db2/V8.1/bnd
    db2 bind @db2ubind.lst blocking all grant public
    db2 bind @ddcsmvs.lst blocking all grant public


    일반유저가 db2를 사용하기 위해선
    [kang@linux kang]$ cat >> .bash_profile
    source ~db2inst1/sqllib/db2profile        
    [kang@linux kang]$ source ~db2inst1/sqllib/db2profile
    [kang@linux kang]$ db2
    db2 => connect to testdb user kang using xxxxxx

       Database Connection Information

    Database server        = DB2/NT 7.2.1
    SQL authorization ID   = KANG
    Local database alias   = TESTDB

    db2 => list tables

    Table/View                      Schema          Type  Creation time
    ------------------------------- --------------- ----- --------------------------
    TEST                            KANG            T     2003-02-22-05.11.43.391000

      1 record(s) selected.

    db2 => select * from test

    ID                  
    --------------------
    dbakorea            

      1 record(s) selected.

    db2 =>

    db2ca : Client Assistant
    db2cc : Control Center







    [명령어 정리]

    기본 명령어

    db2 => ? deregister
    db2 => ? SQL1024N
    db2 => get db cfg for testdb


    데이터베이스 관련 명령어

    C:\DB2\NODE0000\ 하위에 SQL00001 와 같이 하위폴더에 생성된 데이터베이스가 위치된다.
    db2 => create database testdb2 on d:
    db2 => drop database testdb2
    db2 => create database testdb2 alias an_alias
    db2 => create database testdb2 with "This is my testing DB"
    db2 => drop database testdb2
    db2 => connect to testdb
    db2 => disconnect testdb
    db2 => get connection state
    db2 => activate database testdb
    db2 => deactivate database testdb
    db2 => list active databases
    db2 => catalog database aaa
    db2 => uncatalog database aaa
    db2 => change database testdb comment with "Primary Test Database"
    db2 => backup database testdb to d:
    db2 => list db directory DB목록

    테이블스페이스 관련 명령어
    db2 => list tablespaces
    db2 => create tablespace ts_kang managed by system using ('ts_kang')
    db2 => drop tablespace ts_kang
    db2 => list tables


    테이블관련 명령어
    db2 => connect to testdb
    db2 => create table test \
    db2 (cont.) => ( \
    db2 (cont.) => id varchar(10), \
    db2 (cont.) => name varchar(10), \
    db2 (cont.) => sex char(1), \
    db2 (cont.) => age integer, \
    db2 (cont.) => nation char(3) with default '001' \
    db2 (cont.) => ) in ts_kang
    db2 => alter table test add desc varchar(50)
    db2 => rename table test to test2
    db2 => drop table test2


    DML관련 명령어
    db2 => insert into test values ('dbakorea','강명규', 'm', 30, '001')
    db2 => insert into test values ('maddog','강명규', 'm', 30, '001')
    db2 => select * from test
    db2 => update test set age=29
    db2 => update test set name='성인군자' where id='maddog'
    db2 => delete from test where id='maddog'
    db2 => select age+10 from test
    db2 => select age+10 age from test
    db2 => select age+10 as "10년후 나이" from test
    db2 => select min,(age), max(age), avg(age), count(*) from test
    db2 => select * from test where id like 'mad%'
    db2 => select * from test where id like 'mad___'


    VIEW관련 명령어
    db2 => create view v_test as select id, name from test
    db2 => update v_test set name='강명규님' where id='maddog'
    db2 => drop view v_test


    유저생성
    OS유저를 생성하고, DB2에서 이 OS유저에게 권한(Connect)을 GRANT해준다.
    유저의 패스워드는 OS에서 지정한 암호로 정해진다.
    db2 => connect to testdb
    db2 => list tablespaces
    db2 => grant createtab,connect on database to user kang
    db2 => grant use of tablespace ts_kang to user kang
    db2 => connect to testdb user kang using xxxxxx


    get 관련 명령
    db2 => ? get
    db2 => get admin configuration
    db2 => get alert configuration for containers
    db2 => get alert configuration for database manager
    db2 => get alert configuration for databases
    db2 => get alert configuration for tablespaces
    db2 => get authorizations  : 사용자가 가진 권한 표시
    db2 => get connection state
    db2 => get cli configuration
    db2 => get database configuration
    db2 => get database manager configuration
    db2 => get instance


    접속된 놈들 보기
    db2 => list application

    Auth Id  Application    Appl.      Application Id                 DB       # of
             Name           Handle                                    Name    Agents
    -------- -------------- ---------- ------------------------------ -------- -----
    ADMINIST>db2bp.exe      6          *LOCAL.DB2.030416143953        DBAKOREA 1

    db2 => get snapshot for application agentid 6  접속된 놈의 상세정보보기


    SMS의 extent단위 증가:
    테이블스페이스가 SMS(System Managed Space)로 관리되고 있다면,
    테이블스페이스크기는 1 page단위로 증가한다. 이는 성능상 별로 좋지 않다.
    extent(page의 집합. page는 오라클의 db block개념이다)단위로 증가시키려면, 다음과 같다.
    dbakorea : DB명

    C:\Program Files\IBM\SQLLIB\BIN>db2empfa.exe dbakorea


    테이블 분석:
    옵티마이저의 실행계획에 도움을 주기 위해 테이블에 대한 통계정보를 수집하여 시스템 카칼로그 테이블에 저장한다..
    오라클에서의 analyze table 명령과 같다고 보면 되겠다.

    예) kang.test: 사용자.테이블명
    db2 => runstats on table kang.test
    DB20000I  RUNSTATS 명령이 완료되었습니다.
    db2 => runstats on table kang.test with distribution and indexes all shrlevel change
    DB20000I  RUNSTATS 명령이 완료되었습니다.
    db2 =>

    분석결과는 syscat.tables에 기록된다.
    db2 => select card, overflow, npages, fpages from syscat.tables

    CARD                 OVERFLOW    NPAGES      FPAGES
    -------------------- ----------- ----------- -----------
                      -1          -1          -1          -1
    ..

    테이블 분석이 필요한 시점
    1. 대량의 insert, update, delete발생시
    2. import작업후
    3. 테이블에 새로운 컬럼을 추가시
    4. 인덱스 추가시
    5. 테이블 재구성(reorganization)시

    라이선스 보기
    (평가용으로 90일동안 사용가능한데, 재설치해주면 계속 사용가능하다. 어차피 테스트용이므로 상관없음..)
    D:\>db2licm -l
    제품 이름                    = "DB2 Workgroup Server Edition"
    제품 암호                    = "DB2WSE"
    버전 정보                    = "8.1"
    만기 날짜                    = "2004-07-04 (사용 후 구매)"
    동시 사용자 규정             = "사용 가능"
    등록 사용자 규정             = "사용 가능"
    권한이 부여된 사용자 수      = "1"
    제한조건                     = "소프트 중지(사용권 종료시 기록 후 사용 허가)"
    프로세서의 수                    = "1"
    사용권 받은 프로세서의 수        = "4"
    주석                         = ""
    기타 정보                    = ""

    D:\>db2set /?    :db2set사용법
    D:\>db2set -all  :현 인스턴스에 정의된 registry변수.
    D:\>db2set -lr   :지원되는 모든 registry변수


    * DB2와 관련된 정보 보기(괄호안의 값은 8.1버전에서 등록된 개수)
    D:\>db2set -all    System(Environment) Configuration. (registry variables) - 68개
    db2 => get dbm cfg Instance Configuration(DB2 Database Manager configuration parameters) - 82개
    db2 => get db cfg  Database Configuration(DB2 Database configuration parameters)

    * DB2와 관련된 정보 변경(각각 위의 순서대로)
    D:\>db2set 등록변수=변경값
    update dbm cfg            using 패러미터명 변경값 <immediate|deferred>
    update db  cfg (for DB명) using 패러미터명 변경값 <immediate|deferred>


    Configuration Advisor
    DB에 대한 적절한 환경을 만들어 준다. DB변경시마다 다시 해주는 것이 좋다.
    command line processor에서 autoconfigure 사용하면 각 설정키워드를 수동으로 입력하여야 하나,
    제어센터에서 작업할 데이터베이스를 선택후, 메뉴의 선택항목 - 구성 어드바이저를 이용하면
    마법사기능으로 좀 더 쉽게 설정할 수 있다.

    db2 => ? autoconfigure
    AUTOCONFIGURE [USING config-keyword value [{,config-keyword value}...]]
    [APPLY {DB ONLY | DB AND DBM | NONE}]

    config-keyword:
      MEM_PERCENT, WORKLOAD_TYPE, NUM_STMTS, TPM, ADMIN_PRIORITY, IS_POPULATED
      NUM_LOCAL_APPS, NUM_REMOTE_APPS, ISOLATION, BP_RESIZEABLE.

    예) 지정하지 않은 키워드에는 디폴트값이 사용됨.
    db2 => autoconfigure apply db only : 지가 알아서 설정함
    db2 => autoconfigure using mem_percent 40 apply db only : 전체 물리메모리의 40%만 DB2가 사용하도록 구성해라.

    This article comes from dbakorea.pe.kr (Leave this line as is)
    posted by 좋은느낌/원철
    2008. 9. 19. 13:44 개발/DB2

    효과적인 SQL 작성 가이드

      • 실제로 필요한 칼럼들만 가져오도록 SQL을 작성하십시오.
        • select * 문은 사용하지 마십시오. 칼럼 수가 많아질수록 CPU 사용률이 높아집니다.
        • WHERE 절을 적절히 사용하여 필요한 데이터를 적절히 제한하도록 합니다.

      • Host 변수를 사용할 경우 테이블 칼럼 Type과 길이와 동일하게 정의하여 사용하십시오.

      만약 그렇지 않다면, DB2가 인덱스를 사용할 수 없어서 성능에 부정적인 영향을 미치게 됩니다.

      예를 들어, CHAR(6)으로 정의된 칼럼을 CHAR(4)나 CHAR(7)인 필드와 비교하게 되면

      데이터 변환이 일어나고 DB2가 인덱스를 사용하는 대신 데이터 스캔을 하게 되어 성능이 저하됩니다.


      • SQL 문장에 Order by 절을 사용하게 되면 모든 cursor 프로세싱을 수행해야 하므로,

      꼭 필요한 컬러만 Order by를 사용하십시오.


      • Select 수행 결과로 반환되는 행의 수가 한 건일 경우에는 SELECT INTO 절을 사용하는 것이 Cursor를 사용하는 것보다 성능에 좋습니다.

      하지만, 결과 데이터를 변경해야 하는 경우에는 FOR UPDATE OF를 이용하는 Cursor로 선언하는 것이 갱신되는 Row에 Exclusivce Lock을 걸어 데이터 무결성을 보장해주므로 더 좋습니다.
      조회 전용일 경우에는 Select 문에 FOR FETCH ONLY 절을 사용합니다.

        • DISTINCT의 사용을 피합니다. DISTINCT를 사용하면 Sort가 발생하므로, 중복에 별 문제가 없다면 사용하지 않도록 합니다.

        • JOIN 은 특별한 상황을 제외하면 5개 이내로 제한하는 것이 좋습니다.

        만약 그 이상 테이블을 사용해야 하면, Subquery 대신에 Join 을 사용하십시오.

        Optimizer 가 Join을 사용할 때 데이터 접근 방법을 더 많이 가지고 있기 때문입니다.

        그러나 예외도 있으므로 쿼리 별로 테스트가 필요합니다.


        • ORDER BY, GROUP BY, DISTINCT, UNION 을 사용할 경우 해당 칼럼에 Index 를 추가하는 것이 좋습니다.

        • 대안이 있다면 SQL 조건 내에서 SUBSTR 함수의 사용을 피하는 것이 좋습니다.

        예를 들어 다음과 같은 경우 substr 대신 like를 사용하십시오.

        like를 사용하는 경우 index를 사용하게 됩니다.
        예) select custinfo from sales where substr(serial,1,4) = ‘1333’

           select custinfo from sales where serial like ‘1333%’


        • SQL의 기존 함수(AVG,COUNT,MAX,MIN,SUM)를 사용하십시오.

        SQL의 기존 함수를 사용하는 것이 이런 함수를 응용프로그램으로 만들어 사용하는 것보다 더 효과적입니다.


        • 대안이 있다면 SQL의 Scalar 함수의 사용을 피합니다.

        데이터 형태의 변경, 문자열의 조작, 그리고 날짜/시간의 변경들을 위해 사용되는 SQL Scalar 함수(INTEGER, DECIMAL, HEX, SUBST등)는 사용을 피하십시오.


        • 자주 갱신되지 않는 칼럼들은 테이블의 초입에 두고, 반면에 자주 갱신되는 칼럼들은 테이블 끝에 둡니다.

        이것은 DB2 LOG에 어떻게 DB2가 변화한 것을 기록하는지를 연관 지어서 효과적으로 고려한 것입니다.


        • 일반적으로, VARCHAR 칼럼은 테이블 끝에 둡니다. 만약 자주 갱신되는 칼럼이 있다면 자주 갱신되는 칼럼을 VARCHAR 칼럼보다 우선적으로 테이블의 끝에 둡니다.

        • <=, >= 보다는 BETWEEN을 사용합니다.

        BETWEEN은 Optimizer에게 더 효과적인 접근 경로를 선택하게 해줍니다.


        • 배치 프로그램 수행 시, 처리되는 input data의 순서를 Access 하는 테이블의 데이터 순서와 동일하게 맞추어 주십시오.

        이렇게 하면 DB2 가 sequential prefetch를 수행하기 때문에 성능을 높일 수 있습니다.


        • multicolumn index의 경우 Index의 Matching 칼럼 수가 많도록 쿼리를 작성합니다.

        • Commit을 자주하면, 수행시간에 영향을 미칩니다. Commit을 적절히 조절하십시오.

        • LIKE 대신 IN을 사용합니다.

        만약 일어날 수 있는 특정 수만 알고 있다면, LIKE를 사용하는 것보다 IN에 목록을 나열하는 것이 더 효과적입니다.

        예를 들어, 만약 Last Name이 M으로 시작하는 모든 근로자를 찾는다면,

        LIKE ‘m%’ 대신에 BETWEEN ‘maaaaaaaaaaaaaa’ and ‘mzzzzzzzzzzzzzz’를 사용하십시오.


        • NOT의 사용(EXISTS는 제외)을 피합니다. NOT은 단지 매우 복잡한 조건에서만 선택적으로 사용해야 합니다.

        • 만약 응용프로그램 내의 칼럼 값을 이미 알고 있다면, SELECT 절에 칼럼의 사용을 피합니다.
          예) select c1,c2,c3 into :c1, :c2,:c3 from t1 where c1 = :c1

        • SELECT 문의 결과 중복된 행이 없다고 알고 있거나, 중복된 데이터가 있어도 된다면,

        UNION 대신 UNION ALL을 사용합니다.


        • 부정의 논리로 Subquery를 작성할 때, SQL문의 효율성을 높이기 위하여,

        가능하면 NOT IN 대신 NOT EXISTS를 사용합니다.

        NOT EXISTS를 사용할 때 DB2는 단지 존재하지 않는 것만 확인하지만,

        NOT IN조건을 포함하면, DB2는 완벽한 결과 집합을 구성해서 조건을 비교하게 됩니다.


        • JOIN은 Subquery 보다 더 효율적입니다.

        예) 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>


      posted by 좋은느낌/원철
      2008. 9. 18. 18:44 개발/DB2
       

      출처 : 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() 함수는 여러 포맷들을 허용한다. 위 포맷은 단순한 예제일 뿐이다. 독자 여러분이 스스로 해 보길 바란다.

      경고: 
      DB2 UDB V8.1 SQL Cookbook (Graeme Birchall) 발췌(
      http://ourworld.compuserve.com/homepages/Graeme_Birchall).

      DATE 함수에서 쿼트를 없애면 어떻게 될까? 함수는 여전히 작동하겠지만 정확하지 않은 DATE가 나올 것이다.

        SELECT DATE(2001-09-22) FROM SYSIBM.SYSDUMMY1; 

      결과:

       ====== 05/24/0006 

      위 결과에서 어떻게 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>의 자리에, 다음 값들을 사용하여 시간 단위를 나타낸다.

      • 1 = 초의 소수부분
      • 2 = 초
      • 4 = 분
      • 8 = 시간
      • 16 = 요일
      • 32 = 주
      • 64 = 달
      • 128 = 분기
      • 256 = 년

      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)로 디폴트 포맷을 변경하려면 다음과 같이 한다.

      1. 명령행에서, 현재 디렉토리를 sqllib\bnd로 변경한다.

        예: 
        On Windows: c:\program files\IBM\sqllib\bnd 
        On UNIX: /home/db2inst1/sqllib/bnd

      2. SYSADM 권한을 가진 사용자로서 OS 쉘에서 데이터베이스로 연결한다
         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 토론토 연구실.

      posted by 좋은느낌/원철
      2008. 9. 18. 18:34 개발/DB2
      출처 : http://www.ibmdb2.net/board/board.php?bnum=10&num=2533&act=read&cate=&page=1&search=&s_word=

      ****************************************************************************************************

      사용자를 위한 DB2 Conversion 프로젝트, Part 4: DB2 애플리케이션 



      김명훈, 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)

      posted by 좋은느낌/원철
      2008. 9. 18. 15:03 개발/DB2

      SQLSTATE 메시지

      이 절에서는 SQLSTATE와 해당되는 의미를 나열합니다. SQLSTATE는 클래스 코드별로 그룹지어집니다. 부속 코드에 대해서는 해당 테이블을 참조하십시오.

      표 2. 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

      클래스 코드 00 규정되지 않은 성공적인 완료

      표 3. 클래스 코드 00: 규정되지 않은 성공적인 완료
      SQLSTATE 값   
      의미
      00000 조작을 정상적으로 실행했으며 어떠한 유형의 경고 또는 예외 상황도 발생하지 않았습니다.

      클래스 코드 01 경고

      표 4. 클래스 코드 01: 경고
      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문에서
      • 입력 매개변수의 길이, 정밀도 또는 스케일이 소스 함수의 해당 매개변수의 길이, 정밀도 또는 스케일보다 크거나 또는
      • RETURNS나 CAST FROM 매개변수의 길이, 정밀도 또는 스케일이 소스 함수의 길이, 정밀도 또는 스케일보다 작거나 또는
      • CREATE FUNCTION문에 있는 CAST FROM 매개변수의 길이, 정밀도 또는 스케일이 RETURNS 매개변수의 길이, 정밀도 또는 스케일보다 큽니다.
      런타임시 절단될 수 있습니다.(그리고 이때 오류가 발생할 수 있습니다.)
      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가 리턴되었습니다.

      클래스 코드 02 데이터 없음

      표 5. 클래스 코드 02: 데이터 없음
      SQLSTATE 값   
      의미
      02000 다음 예외 중 하나가 발생했습니다.
      • SELECT INTO문 또는 INSERT문의 subselect의 결과가 빈 테이블이었습니다.
      • 검색한 UPDATE 또는 DELETE문에서 식별된 행 수가 0이었습니다.
      • FETCH문에서 참조된 커서의 위치가 결과 테이블의 마지막 행 다음입니다.
      02501 커서 위치가 현재 행의 FETCH에 유효하지 않습니다.
      02502 홀(hole) 삭제 또는 갱신이 발견되었습니다.

      클래스 코드 07 동적 SQL 오류

      표 6. 클래스 코드 07: 동적 SQL 오류
      SQLSTATE 값   
      의미
      07001 호스트 변수의 수가 매개변수 표시문자의 수에 대해 올바르지 않습니다.
      07002 호출 매개변수 목록 또는 제어 블록이 유효하지 않습니다.
      07003 EXECUTE문에서 식별된 명령문이 SELECT문이거나, 준비된 상태가 아닙니다.
      07004 동적 매개변수에 USING절 또는 INTO절이 필요합니다.
      07005 커서의 명령문 이름이 준비된 명령문을 식별하는데, 이 명령문은 커서와 연관될 수 없습니다.
      07006 입력 호스트 변수의 데이터 유형 때문에 이 변수를 사용할 수 없습니다.

      클래스 코드 08 연결 예외

      표 7. 클래스 코드 08: 연결 예외
      SQLSTATE 값   
      의미
      08001 응용프로그램 리퀘스터가 연결을 설정할 수 없습니다.
      08002 연결이 이미 존재합니다.
      08003 연결이 존재하지 않습니다.
      08004 응용프로그램 서버(AS)가 연결 설정을 거부했습니다.
      08007 알 수 없는 트랜잭션 해석(resolution).
      08502 사용 가능한 트랜잭션 관리 프로그램이 없어서 TWOPHASE의 SYNCPOINT로 실행 중인 응용프로그램 프로세스에서 발행한 CONNECT문이 실패했습니다.
      08504 지정된 경로 이름 바꾸기 구성 파일을 처리하는 중에 오류가 발견되었습니다.

      클래스 코드 09 트리거 조치 예외

      표 8. 클래스 코드 09: 트리거 조치 예외
      SQLSTATE 값   
      의미
      09000 트리거 SQL문이 실패했습니다.

      클래스 코드 0A 기능(feature)이 지원되지 않음

      표 9. 클래스 코드 0A: 기능(feature)이 지원되지 않음
      SQLSTATE 값   
      의미
      0A001 프로세스가 연결 가능한 상태에 있지 않으므로, CONNECT문이 유효하지 않습니다.
      0A502 이 데이터베이스 인스턴스에 대한 조치 또는 조작이 작동 가능하지 않습니다.
      0A503 데이터의 불일치 가능성이 있으므로 페더레이티드 삽입, 갱신 또는 삭제 조작을 컴파일할 수 없습니다.

      클래스 코드 0D 유효하지 않은 목표 유형 스펙

      표 10. 클래스 코드 0D: 유효하지 않은 유형 스펙
      SQLSTATE 값   
      의미
      0D000 목표 구조화된 데이터 유형 스펙이 적절한 소스 구조화된 데이터 유형의 부속 유형이 아닙니다.

      클래스 코드 0F 유효하지 않은 토큰

      표 11. 클래스 코드 0F: 유효하지 않은 토큰
      SQLSTATE 값   
      의미
      0F001 LOB 토큰 변수가 현재 어떤 값도 나타내지 않습니다.

      클래스 코드 0K 유효하지 않은 RESIGNAL문

      표 12. 클래스 코드 0K: 유효하지 않은 RESIGNAL문
      SQLSTATE 값   
      의미
      0K000 RESIGNAL문이 핸들러 내에 있지 않습니다.

      클래스 코드 20 Case문에 해당되는 Case가 없음

      표 13. 클래스 코드 20: Case문에 해당되는 Casre가 없음
      SQLSTATE 값   
      의미
      20000 CASE문에 해당하는 Case가 없습니다.

      클래스 코드 21 카디낼리티 위반

      표 14. 클래스 코드 21: 카디낼리티 위반
      SQLSTATE 값   
      의미
      21000 SELECT INTO의 결과가 두 행 이상의 결과 테이블이거나, 기본 술어의 서브쿼리 결과가 둘 이상의 값입니다.
      21501 자체 참조 테이블로의 복수 행 삽입(INSERT)은 유효하지 않습니다.
      21502 기본 키의 복수 행 갱신(UPDATE)은 유효하지 않습니다.
      21504 RESTRICT나 SET NULL 삭제 규칙이 있는 자체 참조 테이블로부터의 복수 행 삭제(DELETE)는 유효하지 않습니다.
      21505 행 함수는 둘 이상의 행을 리턴해서는 안됩니다.
      21506 테이블의 동일한 행을 두 번 이상 갱신, 삭제 또는 삽입 조작의 목표로 사용할 수 없습니다.

      클래스 코드 22 데이터 예외

      표 15. 클래스 코드 22: 데이터 예외
      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 조작에 유효하지 않은 입력 데이터가 발견되었습니다.

      클래스 코드 23 제한조건 위반

      표 16. 클래스 코드 23: 제한조건 위반
      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 페더레이티드 데이터 원본에서 무결성 제한조건을 위반했습니다.

      클래스 코드 24 유효하지 않은 커서 상태

      표 17. 클래스 코드 24: 유효하지 않은 커서 상태
      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 외부 함수 또는 메소드에 의해 커서가 열린 상태로 있습니다.

      클래스 코드 25 유효하지 않은 트랜잭션 상태

      표 18. 클래스 코드 25: 유효하지 않은 트랜잭션 상태
      SQLSTATE 값   
      의미
      25000 삽입, 갱신 또는 삭제 조작은 지정된 컨텍스트에서 유효하지 않습니다.
      25001 이 명령문은 작업 단위(UOW)에서 첫 번째 명령문으로만 허용됩니다.
      25501 이 명령문은 작업 단위(UOW)에서 첫 번째 명령문으로만 허용됩니다.
      25502 단일 트랜잭션에 조작이 여러 번 발생할 수 없습니다.

      클래스 코드 26 유효하지 않은 SQL문 ID

      표 19. 클래스 코드 26: 유효하지 않은 SQL문 ID
      SQLSTATE 값   
      의미
      26501 식별된 명령문이 존재하지 않습니다.

      클래스 코드 27 트리거 데이터 변경 위반

      표 20. 클래스 코드 27: 트리거 데이터 변경 위반
      SQLSTATE 값   의미
      27000 제한조건 또는 트리거에 의해 MERGE문의 목표 테이블을 수정하려고 했습니다.

      클래스 코드 28 유효하지 않은 권한 부여 스펙

      표 21. 클래스 코드 28: 유효하지 않은 권한 부여 스펙
      SQLSTATE 값   
      의미
      28000 권한 부여 이름이 유효하지 않습니다.

      클래스 코드 2D 유효하지 않은 트랜잭션 종료

      표 22. 클래스 코드 2D: 유효하지 않은 트랜잭션 종료
      SQLSTATE 값   
      의미
      2D521 SQL COMMIT 또는 ROLLBACK이 현재 운영 환경에서는 유효하지 않습니다.
      2D522 ATOMIC 복합 명령문에서는 COMMIT 및 ROLLBACK이 허용되지 않습니다.
      2D528 동적 COMMIT가 응용프로그램 실행 환경에 유효하지 않습니다.
      2D529 동적 ROLLBACK이 응용프로그램 실행 환경에 유효하지 않습니다.

      클래스 코드 2E 유효하지 않은 연결 이름

      표 23. 클래스 코드 2E: 유효하지 않은 연결 이름
      SQLSTATE 값   
      의미
      2E000 연결 이름이 유효하지 않습니다.

      클래스 코드 34 유효하지 않은 커서 이름

      표 24. 클래스 코드 34: 유효하지 않은 커서 이름
      SQLSTATE 값   
      의미
      34000 커서 이름이 유효하지 않습니다.

      클래스 코드 36 유효하지 않은 커서 스펙

      표 25. 클래스 코드 36: 유효하지 않은 커서 스펙
      SQLSTATE 값   
      의미
      36001 SENSITIVE 커서는 지정된 SELECT문에 대해 정의할 수 없습니다.

      클래스 코드 38 외부 함수 예외

      표 26. 클래스 코드 38: 외부 함수 예외
      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 제공)가 비정상적으로 종료했습니다.

      다음과 같은 이유 코드 중 하나가 메시지 텍스트에 나타날 수 있습니다.

      01
      숫자 값이 범위를 벗어남
      02
      0으로 나눔
      03
      산술 오버플로우 또는 언더플로우
      04
      유효하지 않은 날짜 형식
      05
      유효하지 않은 시간 형식
      06
      유효하지 않은 시간소인 형식
      07
      유효하지 않은 시간소인 지속 시간 문자 표현
      08
      유효하지 않은 간격 유형(1, 2, 4, 8, 16, 32, 64, 128, 256 중 하나여야 함)
      09
      문자열이 너무 김
      10
      문자열 함수의 길이나 위치가 범위를 벗어남
      11
      유효하지 않은 부동 소수점 숫자의 문자 표현
      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)를 롤백하는 데 실패했습니다.

      클래스 코드 39 외부 함수 호출 예외

      표 27. 클래스 코드 39: 외부 함수 호출 예외
      SQLSTATE 값   
      의미
      39001 사용자 정의 함수(UDF)가 유효하지 않은 SQLSTATE를 리턴했습니다.
      39004 IN 또는 INOUT 인수에는 널(NULL) 값이 허용되지 않습니다.
      39501 인수와 연관된 구조 식별자(eye-catcher)가 수정되었습니다.

      클래스 코드 3B 유효하지 않은 SAVEPOINT

      표 28. 클래스 코드 3B: 유효하지 않은 SAVEPOINT
      SQLSTATE 값   
      의미
      3B001 세이브포인트가 유효하지 않습니다.
      3B002 최대 세이브포인트 수에 도달했습니다.
      3B501 중복된 세이브포인트 이름이 발견되었습니다.
      3B502 RELEASE 또는 ROLLBACK TO SAVEPOINT가 지정되었으나 세이브포인트가 존재하지 않습니다.
      3B503 트리거 또는 전역 트랜잭션에서는 SAVEPOINT, RELEASE SAVEPOINT 또는 ROLLBACK TO SAVEPOINT가 허용되지 않습니다.

      클래스 코드 40 트랜잭션 롤백

      표 29. 클래스 코드 40: 트랜잭션 롤백
      SQLSTATE 값   
      의미
      40001 자동 롤백되는 교착 상태나 시간종료가 발생했습니다.
      40003 명령문 완료를 알 수 없습니다.
      40504 시스템 오류로 인해 작업 단위가 롤백되었습니다.
      40506 SQL 오류로 인해 현재 트랜잭션이 롤백되었습니다.
      40507 인덱스 작성의 실패로 현재 트랜잭션이 롤백되었습니다.

      클래스 코드 42 구문 오류 또는 액세스 규칙 위반

      표 30. 클래스 코드 42: 구문 오류 또는 액세스 규칙 위반
      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 별칭 계산 결과 컬럼이 유효하지 않습니다.

      클래스 코드 44 WITH CHECK OPTION 위반

      표 31. 클래스 코드 44: WITH CHECK OPTION 위반
      SQLSTATE 값   
      의미
      44000 결과 행이 뷰 정의를 충족시키지 않으므로, 삽입이나 갱신 조작이 허용되지 않습니다.

      클래스 코드 46 Java DDL

      표 32. 클래스 코드 46: Java DDL
      SQLSTATE 값   
      의미
      46001 Java DDL - 유효하지 않은 URL.
      46002 Java DDL - 유효하지 않은 jar 이름.
      46003 Java DDL - 유효하지 않은 클래스 삭제.
      46007 Java DDL - 유효하지 않은 시그니처.
      46008 Java DDL - 유효하지 않은 메소드 스펙.
      46103 Java 루틴에 ClassNotFound 예외가 발생했습니다.
      46501 Java DDL - 선택적 구성요소가 구현되지 않았습니다.

      클래스 코드 51 유효하지 않은 응용프로그램 상태

      표 33. 클래스 코드 51: 유효하지 않은 응용프로그램 상태
      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 유효하지 않은 컴파일 환경.

      클래스 코드 53 유효하지 않은 피연산자 또는 불일치 스펙

      표 34. 클래스 코드 53: 유효하지 않은 피연산자 또는 불일치 스펙
      SQLSTATE 값   
      의미
      53040 지정된 버퍼 풀이 지정된 데이터베이스 파티션에 존재하지 않습니다.
      53090 하나의 코드화 체계(ASCII, EBCDIC 또는 유니코드)의 데이터만 같은 SQL문에서 참조될 수 있습니다.
      53091 지정된 코드화 체계가 포함하는 오브젝트에 현재 사용 중인 코드화 체계와 동일하지 않습니다.

      클래스 코드 54 SQL 또는 제품 한계가 초과됨

      표 35. 클래스 코드 54: SQL 또는 제품 한계가 초과됨
      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에 지정된 값이 유효한 범위내에 있지 않습니다.

      클래스 코드 55 오브젝트가 전제(prerequisite) 상태에 있지 않음

      표 36. 클래스 코드 55: 오브젝트가 전제(prerequisite) 상태에 있지 않음
      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 자동 스토리지에 데이터베이스를 사용할 수 없기 때문에 스토리지 경로가 제공될 수 없습니다.

      클래스 코드 56 기타 SQL 또는 제품 오류

      표 37. 클래스 코드 56: 기타 SQL 또는 제품 오류
      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문이 현재 데이터베이스 파티션에서만 실행될 수 있는 루틴을 참조합니다.

      클래스 코드 57 자원이 사용 가능하지 않거나 조작원이 개입함

      표 38. 클래스 코드 57: 자원이 사용 가능하지 않거나 조작원이 개입함
      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 테이블 스페이스에 지정된 조치에 사용할 수 있는 스페이스가 충분하지 않습니다.

      클래스 코드 58 시스템 오류

      표 39. 클래스 코드 58: 시스템 오류
      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는 개발용으로만 사용하십시오. 코드 이동 전 변경해야 합니다.

      posted by 좋은느낌/원철
      prev 1 ··· 3 4 5 6 7 8 9 10 next