database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1706 게시물 읽기
No. 1706
테이블 RENAME시 발생되는 문제에 대해 다시 질문 드립니다.
작성자
이도희
작성일
2008-08-19 17:46
조회수
10,085
  • rename시 제약 사항
    • 기존의 뷰 정의나 Materialized Query Table 정의 내에서 참조될 수 없습니다.
    • 기존 트리거의 트리거 SQL문에서 참조될 수 없거나 기존 트리거의 주제 테이블일 수 없습니다.
    • SQL 함수에서 참조될 수 없습니다.
    • 점검 제한조건을 가질 수 없습니다.
    • 식별 컬럼이 아닌 다른 생성된 컬럼을 가질 수 없습니다.
    • 참조 무결성 제한조건에서 상위 또는 종속 테이블일 수 없습니다.
    • 기존의 참조된 컬럼 범위일 수 없습니다.
  • 정보센터에 보면 위와 같은 것에서 참조될 때 RENAME이 되지 않잖아요..

    이러한 rename문제가 있을 시 때문에 테이블에 종속되어 있는 모든 오브젝트들을 알아보는 쿼리를 알고 싶은데요. 

    단순한 1:1 즉 첫 레벨의 dependency말고 한 테이블에 대한 모든 dependency를 찾는 쿼리가 있을까요??


    이 글에 대한 댓글이 총 4건 있습니다.
    수정을 했습니다.   ㅎㅎ
    ====================================


    SQL은 떠오르지 않아 스크립트를 만들어 보았습니다. 
    한번에 관련 테이블들이 나오기는 하지만 수작업이 필요합니다. 



    > cat ref.sh

    integer L=1
    integer CNT=1
    DB=sample
    TAB=$1

    db2 connect to $DB > /dev/null

    echo  $TAB > list.txt
    rm -f $TAB.ref.txt

    while [ $CNT != 0 ]
    do

      echo $L"."

      for i in `cat list.txt`
      do

      db2 -x "select substr(rtrim(REFTABSCHEMA)||'.'||REFTABNAME,1,40), substr(rtrim(tabschema)||'.'||TABNAME,1,40), \
                     count(*) over() cnt \
                from syscat.references \
               where substr(rtrim(REFTABSCHEMA)||'.'||REFTABNAME,1,40)='$i'" > ref.tmp

      CNT=`cat ref.tmp|awk '{print $3}' | head -1`
      cat ref.tmp | awk '{print $1,$2}'
      cat ref.tmp|awk '{print $2}' >> list.tmp

      done

      cat list.tmp > list.txt
      rm -f list.tmp

      L=$L+1
      echo

    done



    < 테스트 >  
    sh ref.sh INST1.A

    1.
    INST1.A INST1.B
    INST1.A INST1.D

    2.
    INST1.B INST1.C

    조는 냥이님이 2008-08-20 11:02에 작성한 댓글입니다.
    이 댓글은 2008-08-20 15:19에 마지막으로 수정되었습니다. Edit

    냥이님께서 주신 스크립트는 잘 모르겠지만 제가 실행을 해보긴 했는데 첫번째 레벨밖에는 검색되지 않는것 같아요. 

    CREATE TABLE A(A_ID INTEGER NOT NULL,
                   NAME VARCHAR(10),
            ADDRESS VARCHAR(30),
            SALARY INTEGER   
            ) IN USERSPACE1;
           
    ALTER TABLE A ADD CONSTRAINT PK_A PRIMARY KEY(A_ID);


    CREATE TABLE B(B_ID INTEGER NOT NULL,
                   DEPT VARCHAR(10),
            C VARCHAR(20))IN USERSPACE1;      
    ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY(B_ID);       
    ALTER TABLE B ADD CONSTRAINT FK_B FOREIGN KEY(B_ID) REFERENCES A ON DELETE CASCADE;

    CREATE TABLE D(D_ID INTEGER NOT NULL,
                   DEPT VARCHAR(10),
            C VARCHAR(20))IN USERSPACE1;      
    ALTER TABLE D ADD CONSTRAINT PK_D PRIMARY KEY(D_ID);       
    ALTER TABLE D ADD CONSTRAINT FK_D FOREIGN KEY(D_ID) REFERENCES A ON DELETE CASCADE;

    CREATE TABLE C(C_ID INTEGER NOT NULL ) IN USERSPACE1;
    ALTER TABLE C ADD CONSTRAINT FK_C FOREIGN KEY(C_ID) REFERENCES B ON DELETE CASCADE;


    이렇게 되면 

    A -> B -> C
       -> D 

    이런 관계로 참조가 되는데 위의 스크립트는 

    1.
    DB2INST1.A DB2INST1.B
    DB2INST1.A DB2INST1.D

    2.


    이렇게만 나오더라구요..

    이도희님이 2008-08-20 14:36에 작성한 댓글입니다.
    이 댓글은 2008-08-20 15:02에 마지막으로 수정되었습니다. Edit

    감사드립니다. 냥이님 덕분에 항상 많은 것을 배우는것 같아요. 


    항상 감사드립니다.

    이도희님이 2008-08-21 09:58에 작성한 댓글입니다. Edit

    질문 한가지만 더 할게요.. 


    rename 제한조건에서 

  • 기존의 참조된 컬럼 범위일 수 없습니다. 


    위의 제약조건은 어떤 걸 의미하는지 잘 모르겠습니다..


  • 이도희님이 2008-08-21 14:09에 작성한 댓글입니다.
    이 댓글은 2008-08-21 14:59에 마지막으로 수정되었습니다. Edit
    [Top]
    No.
    제목
    작성자
    작성일
    조회
    1710DB2와 델파이 연동에 대해 질문 드립니다. [1]
    손상오
    2008-08-25
    9113
    1709인덱스 스크립트 [1]
    이도희
    2008-08-22
    9280
    1707마지막 특정문자 이후로 자르는 법 문의드립니다. [2]
    궁금이
    2008-08-22
    10151
    1706테이블 RENAME시 발생되는 문제에 대해 다시 질문 드립니다. [4]
    이도희
    2008-08-19
    10085
    1705db2 sql system error. [3]
    지창용
    2008-08-18
    11743
    1704OS/390 DB2 5.1 JDBC 문의드립니다.
    김황만
    2008-08-18
    8901
    1703다중 데이터베이스 파티션 질문 [1]
    이도희
    2008-08-14
    9726
    Valid XHTML 1.0!
    All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
    작업시간: 0.033초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다