320x100

[ORACLE] 시퀀스 값 초기화

Posted on 2021. 6. 15. 16:16
Filed Under DB

DROP SEQUENCE 하고 새로 만들면 쉽겠지만 권한문제로 DROP이 불가할때 사용할 수 있는 방법


--------------------------------------------------------------
--순번 1으로 초기화
DECLARE
  P_CURRVAL_NUM NUMBER;
BEGIN
    -- 1)시퀀스 현재값 얻기(초기화 할거니깐 .NEXTVAL 해버리자)
    SELECT 대상SEQ.NEXTVAL-1 INTO P_CURRVAL_NUM FROM DUAL;
    DBMS_OUTPUT.PUT_LINE('순번초기화 : '||P_CURRVAL_NUM);
    -- 2)증감값을 [-현재값]으로 조정
    EXECUTE IMMEDIATE 'ALTER SEQUENCE 대상SEQ INCREMENT BY -'||P_CURRVAL_NUM;
    -- 3)증감 실행
    SELECT 대상SEQ.NEXTVAL INTO P_CURRVAL_NUM FROM DUAL;
    --4)증감값 원복
    EXECUTE IMMEDIATE 'ALTER SEQUENCE 대상SEQ INCREMENT BY 1';
    
    --결과확인
    SELECT 대상SEQ.CURRVAL INTO P_CURRVAL_NUM FROM DUAL;
    DBMS_OUTPUT.PUT_LINE('-> '||P_CURRVAL_NUM);
END;

DBMS_OUTPUT 출력 창 보기: 메뉴 [보기] > DBMS 출력 > (출력창의)[+]버튼으로 Target DB설정

 

반응형

[Oracle] 메타데이터 조회(continue..)

Posted on 2021. 5. 11. 10:13
Filed Under DB

..

-- Oracle Version 확인
select * from v$version;

-- 접속계정(현재세션)의 정보 조회
SELECT  SYS_CONTEXT('USERENV', 'IP_ADDRESS') -- 접속한IP(The IP address of the client machine.)
FROM DUAL;

-- 테이블 컬럼 정보
  SELECT t.TABLE_NAME, tc.COMMENTS, t.COLUMN_ID, t.COLUMN_NAME
        ,t.DATA_TYPE
         ||NVL2(t.DATA_LENGTH, '('||TO_CHAR(t.DATA_LENGTH)
                                  ||NVL2(t.DATA_PRECISION, ','||TO_CHAR(t.DATA_PRECISION),'')
                              ||')', '') AS DATA_TYPE
        ,t.NULLABLE, cc.COMMENTS, t.DATA_DEFAULT AS DATA_DEFAULT
        ,A.POSITION AS PK_ORDER
    FROM USER_TAB_COLS t --테이블별 컬럼정보
        ,USER_TAB_COMMENTS tc -- 테이블 코멘트
        ,USER_COL_COMMENTS cc  -- 컬럼 코멘트
        ,(SELECT ct.TABLE_NAME, ct_col.COLUMN_NAME, ct_col.POSITION
            FROM ALL_CONSTRAINTS  ct --제약조건
                ,ALL_CONS_COLUMNS ct_col --제약조건 컬럼
           WHERE ct.CONSTRAINT_TYPE = 'P' 
             AND ct.OWNER = ct_col.OWNER
             AND ct.CONSTRAINT_NAME = ct_col.CONSTRAINT_NAME
         ) A
   WHERE 1=1
     AND tc.TABLE_TYPE = 'TABLE'
     AND t.TABLE_NAME = tc.TABLE_NAME(+)
     AND t.TABLE_NAME = cc.TABLE_NAME(+) AND t.COLUMN_NAME = cc.COLUMN_NAME(+)
     AND t.TABLE_NAME = tc.TABLE_NAME(+)
	 AND t.TABLE_NAME = A.TABLE_NAME(+)
     AND t.COLUMN_NAME = A.COLUMN_NAME(+)
     AND t.TABLE_NAME IN ('대상테이블명')
ORDER BY t.TABLE_NAME, t.COLUMN_ID;


-- 시퀀스 조회
SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME LIKE '%시퀀스명%';

--제약조건 조회 :CONSTRAINT_TYPE=P(PK)/C(제약조건)
SELECT A.TABLE_NAME, A.CONSTRAINT_NAME, A.CONSTRAINT_TYPE
     , B.COLUMN_NAME , B.POSITION
  FROM ALL_CONSTRAINTS  A
     , ALL_CONS_COLUMNS B
 WHERE A.TABLE_NAME      = '테이블명'
   AND A.CONSTRAINT_TYPE = 'P' --P(PrimaryKey)|C(제약조건)|..
   AND A.OWNER           = B.OWNER
   AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
 ORDER BY B.POSITION;
 
--프로시저 내용 검색
SELECT T1.OBJECT_ID, T1.OBJECT_NAME, T1.OBJECT_TYPE, T2.TEXT
  FROM USER_OBJECTS T1
 INNER JOIN USER_SOURCE T2
    ON T1.OBJECT_NAME = T2.NAME
 WHERE T1.OBJECT_TYPE IN ('PROCEDURE')--, 'FUNCTION')
   AND T2.TEXT LIKE '%EXECUTE%'  /* 검색어 */
  ;

--CREATE TABLE 컬럼정의 구문 뽑기
SELECT COLUMN_NAME||' '
    ||DATA_TYPE||CASE DATA_TYPE WHEN 'NUMBER' THEN DECODE(DATA_LENGTH, 22, '', '('||DATA_LENGTH||')')
                     WHEN 'VARCHAR2' THEN '('||DATA_LENGTH||')' END
    ||DECODE(NULLABLE, 'Y', ' NOT NULL ', '')||', '  
    FROM USER_TAB_COLS WHERE TABLE_NAME = '테이블명';
/* REF_VALUE_18 VARCHAR2(100) NOT NULL , 
   REF_VALUE_19 VARCHAR2(100) NOT NULL , 
   REF_VALUE_20 VARCHAR2(100) NOT NULL ,   */
   
--INSERT문 컬럼목록 만들기
SELECT LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) 
  FROM USER_TAB_COLS WHERE TABLE_NAME = '테이블명';

 

반응형

[Oracle] 프로시저에서 동적쿼리 사용법

Posted on 2016. 5. 2. 11:13
Filed Under DB

DB프로시저에서 경우에 따라 테이블명을 바꿔야할 경우가 생겼다.

[핵심]
EXECUTE IMMEDIATE : Inset, Update, Delete 구문을 실행하거나 Select 구문을 실행 시 INTO를 사용하여 단일 값을 리턴 받을 때 사용
OPEN-FOR : Select 구문을 실행 시 Cursor를 리턴 받을 때 사용

[검색키워드] 
oracle procedure dynamic query

[정보출처]







반응형

[Oracle] 테이블 컬럼 구조 조회하기 (메타테이블,DESC)

Posted on 2014. 5. 19. 17:22
Filed Under DB

방법1. Oracle 메타데이터 테이블 이용


-- 테이블 코멘트
SELECT * FROM USER_TAB_COLS WHERE TABLE_NAME = '테이블명'; 
--└ 단, DB Link 테이블에 대해서는 권한때문인지 조회되지 않는다. 

-- 컬럼 코멘트 정보 
SELECT * FROM USER_COL_COMMENTS WHERE ROWNUM < 5; 

-- 테이블 스키마(DATA_TYPE,NULLABLE,..) 
SELECT * FROM USER_TAB_COLUMNS B WHERE ROWNUM < 5;

-- 테이블 컬럼 목록 조회
  SELECT t.TABLE_NAME, tc.COMMENTS, t.COLUMN_ID, t.COLUMN_NAME
         ||NVL2(t.DATA_LENGTH, '('||TO_CHAR(t.DATA_LENGTH)
                                  ||NVL2(t.DATA_PRECISION, ','||TO_CHAR(t.DATA_PRECISION),'')
                              ||')', '') AS DATA_TYPE
        ,t.NULLABLE, cc.COMMENTS, t.DATA_DEFAULT AS DATA_DEFAULT
    FROM USER_TAB_COLS t --테이블별 컬럼정보
        ,USER_TAB_COMMENTS tc -- 테이블 코멘트
        ,USER_COL_COMMENTS cc  -- 컬럼 코멘트
   WHERE 1=1
     AND tc.TABLE_TYPE = 'TABLE' AND t.TABLE_NAME = tc.TABLE_NAME(+)
     AND t.TABLE_NAME = cc.TABLE_NAME(+) AND t.COLUMN_NAME = cc.COLUMN_NAME(+)
     AND t.TABLE_NAME IN ('대상테이블')
ORDER BY t.TABLE_NAME, t.COLUMN_ID;

-- 2022.11.16 덧) CURRENT_OWER : ALL_OWNER 대상으로 조회하기
USER_TABLES : ALL_TABLES
USER_TAB_COLS : ALL_TAB_COLS
USER_TAB_COMMENTS : ALL_TAB_COMMENTS
USER_COL_COMMENTS : ALL_COL_COMMENTS

방법2. DESC 명령어
DESC 테이블명;
이 명령은 원인은 모르겠으나 Toad 10.5 에서 동작하지 않는다.(오류는 발생하지 않으나 무반응)

Oracle Client 설치시 설치된 SQL Plus로 접속해서 볼 수 있었다.
로컬DB 외에 DB Links 된 외부 테이블에 대해서도 작동된다.

1) 도스 커맨드 창 실행
2) sqlplus ID/PWD@서비스명
3) SQL> desc 테이블명

반응형

Oracle Instant Client [펌]

Posted on 2011. 11. 3. 11:41
Filed Under DB

http://cafe.naver.com/hermeswing/613

Developer를 통해 연결하기 위해서 무거운 Oracle 프로그램을 설치할 필요가 없더군요.. 답은 Instant Client 라는 OTN 개발과 배포를 위한 프로그램입니다. 프로그램 설치...


Oracle에 연결하기 위해 Oracle Client를 설치하거나, 좀 심한경우에는 Oracle Enterprise까지 설치하는 경우가 있습니다.

그저 Toad 나 P/L SQL Developer를 통해 연결하기 위해서 무거운 Oracle 프로그램을 설치할 필요가 없더군요..
답은 Instant Client 라는 OTN 개발과 배포를 위한 프로그램입니다.

프로그램 설치 방법

1. 프로그램의 다운로드
 http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

  일단 자신의 OS환경에 맞는 프로그램을 다운로드 받은 후 적당한 위치에 압축을 풉니다.
  (제 경우는 Instant Client Package - Basic 버젼을 다운로드 받았습니다.)
 

2. 환경 설정

  Path                             예) C:\instantclient_10_2;

 NLS_LANG                     예) NLS_LANG= KOREAN_KOREA.AL32UTF8

  ORACLE_HOME            예) ORACLE_HOME= C:\\instantclient_10_2

  TNS_ADMIN                 예) TNS_ADMIN= C:\\instantclient_10_2

 

3. tnsnames.ora 파일 생성

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ALIAS =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP주소)(PORT = PORT))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SID명)
      (SRVR = DEDICATED)
    )
  )

4. Toad 나 P/L SQL Developer에서 연결하면 됩니다.

반응형

About

by 쑤기c

반응형