SMALL

-- 테이블 생성

 

CREATE TABLE MY_DUAL AS(

    SELECT 1 ID, 2000 SALARY FROM DUAL UNION ALL

    SELECT 2 ID, 2200 SALARY FROM DUAL UNION ALL

    SELECT 3 ID, 2400 SALARY FROM DUAL UNION ALL

    SELECT 4 ID, 2600 SALARY FROM DUAL UNION ALL

    SELECT 5 ID, 2800 SALARY FROM DUAL UNION ALL

    SELECT 6 ID, 2600 SALARY FROM DUAL UNION ALL

    SELECT 7 ID, 3000 SALARY FROM DUAL UNION ALL

    SELECT 8 ID, 2600 SALARY FROM DUAL

);

 

-- 기존 테이블 컬럼만 복사해 새 테이블 생성

 

CREATE TABLE COPY_NEW_TABLE AS(

    SELECT * FROM EXIST_TABLE_NAME

    WHERE 1=2 -- FALSE

);

 

2. 컬럼 ADD, MODIFY, RENAME, DROP 사용하기 - 1

 

-- 1. 컬럼 ADD 

-- ALTER TABLE 테이블명 ADD 새 컬럼명 이름  데이터타입;

 

ALTER TABLE MY_DUAL ADD ANNUAL_INCOME VARCHAR2(1000);

UPDATE MY_DUAL SET ANNUAL_INCOME = SALARY;

 

-- 2. 컬럼 MODIFY 

-- ALTER TABLE 테이블 명 MODIFY 컬럼명 데이터타입;

 

ALTER TABLE MY_DUAL MODIFY SALARY VARCHAR2(1000);

 

-- 3. 컬럼 RENAME

-- ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;

 

ALTER TABLE MY_DUAL RENAME COLUMN ANNUAL_INCOME TO SALARY;

 

-- 4. 컬럼 DROP

-- ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;

 

ALTER TABLE MY_DUAL DROP COLUMN SALARY;

 

3. 컬럼에 데이터가 있을때 데이터 유형 바꾸는 방법 - 2

 

-- 컬럼에 데이터가 있을때 데이터 유형 바꾸는 방법

 

-- 1. 새 이름으로 새 컬럼을 하나 생성 (ADD)

ALTER TABLE MY_DUAL ADD ANNUAL_INCOME VARCHAR2(1000);

 

-- 2. 새 컬럼에 기존 데이터를 다시 입력 (SET)

UPDATE MY_DUAL SET ANNUAL_INCOME = SALARY;

 

-- 3. 기존 컬럼 삭제 (DROP)

ALTER TABLE MY_DUAL DROP COLUMN SALARY;

 

-- 4. 새 컬럼의 이름을 기존 컬럼 이름으로 바꿈 (RENAME)

ALTER TABLE MY_DUAL RENAME COLUMN ANNUAL_INCOME TO SALARY;

 

현재 SALARY 컬럼의 데이터 유형은 NUMBER 

SALARY 컬럼은 데이터를 갖고 있다.

데이터를 가지고있는 컬럼에 대한 데이터유형 변경은 허용하지 않는다.

 

그러므로 새 이름의 필요한 데이터유형의 새로운 컬럼을 하나 생성한 뒤 

기존 컬럼이 가지고 있는 데이터를 새로운 데이터유형의 컬럼에 넣어주고(이동)

기존 컬럼을 삭제(DROP) 하고 새 이름의 새컬럼 이름을 기존 컬럼의 이름으로 바꿔주면 된다.

 

 

출처 : https://shlee0882.tistory.com/54

LIST
블로그 이미지

SeoHW

,
SMALL

제 1절 데이터 모델의 이해

-       모델링의 특징

1.     추상화(모형화가설화)는 현실세계를 일정한 형식에 맞추어 표현한다는 것으로.. 다양한 형상을 일정한 양식인 표기법에 의해 표현한다는 것

2.     단순화는 복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념

3.     명확화는 누구나 이해하기 쉽게 애매모호함을 제거하고 정확하게 현상을 기술하는 것

 

-       데이터 모델링이란

1.     정보시스템을 구축하기 위한 데이터관점의 업무 분석 기법

2.     현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정

3.     데이터베이스를 구축하기 위한 분석/설계 과정

-       데이터 모델링의 중요성

1.     파급효과(Leverage): 데이터 구조의 변경은 전체 시스템 구축 프로젝트에서 큰 위험요소이다.

2.     복잡한 정보 요구사항의 간결한 표현(Conciseness): 데이터 모델은 구축할 시스템의 정보 요구사항과 한계를 가장 명확하고 간결하게 표현할 수 있는 도구이다.

3.     데이터 품질(Data Quality): DB에 담겨 있는 데이터는 기업의 중요한 자산이다오랜 기간 숙성된 데이터를 전략적으로 활용 가능

-       데이터 모델링의 유의점

1.     중복(Duplication): 여러 장소에 같은 정보를 저장하는 것

2.     비유연성(Inflexibility): 사소한 업무변화에도 데이터 모델이 수시로 변경됨으로써 유지보수의 어려움을 가중시킬 수 있음그래서 처음부터 발생될 모든 사건을 염두하고 모델링을 해야 된다.

3.     비일관성(Inconsistency): 같은 정보를 두 곳에서 가지고 있는데 한 쪽만 업데이트 한 경우그래서 데이터간 상호 연관 관계에 대해 명확히 정의하고 모델링을 해야 한다.

 

-       데이터 모델링의 3단계

1.     개념적 데이터 모델링추상화 수준이 높고 업무중심적이며 포괄적인 수준의 모델링 진행전사적 데이터 모델링. EA 수립시 많이 이용사용자와 시스템 개발자가 데이터 요구 사항을 발견하는 것을 지원현 시스템이 어떻게 변형되어야 하는가를 이해하는데 유용함.

2.     논리적 데이터 모델링시스템으로 구축하고자 하는 업무에 대해 Key, 속성관계 등을 정확하게 표현재사용성이 높음시스템 구축을 위해서 가장 먼저 시작할 기초적인 업무조사를 하는 초기단계에서부터 시스템 설계의 전 과정을 지원.

3.     물리적 데이터 모델링실제로 데이터베이스에 이식할 수 있도록 성능저장 등 물리적인 성격을 고려하여 설계데이터 모델이 데이터 저장소로서 어떻게 컴퓨터 하드웨어에 표현될 것인가데이터가 물리적으로 컴퓨터에 어떻게 저장될 것인가 하는 정의.

-       데이터베이스의 3단계 구조

1.     외부스키마(External Schema): View 단계 여러 개의 사용자 관점으로 구성개개 사용자가 보는 개인적 DB 스키마사용자 관점 접근하는 특성에 따른 스키마 구성

2.     개념스키마(Conceptual Schema): 개념단계 하나의 개념적 스키마로 구성 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는 것

3.     내부스키마(Internal Schema): DB가 물리적으로 저장된 형식물리적 장치에서 데이터가 실제적으로 저장되는 방법을 표현하는 스키마

 

-       좋은 데이터 모델의 요소

1.     완전성(Completeness): 모든 데이터가 데이터 모델에 정의되어 있어야 한다.

2.     중복배제(Non-Redundancy): 하나의 데이터베이스 내에 동일한 사실은 한 번만 기록하여야 한다.

3.     업무규칙(Business Rule): 데이터 모델을 활용하는 모든 사용자가 공유할 수 있도록 업무규칙을 제공

4.     데이터 재사용(Data Reusability): 데이터의 재사용성을 향상시키고자 한다면 데이터의 통합성과 독립성에 대해서 충분히 고려해야 함

5.     의사소통(Communication): 데이터 모델은 대상으로 하는 업무를 데이터 관점에서 분석하고 이를 설계하여 나오는 최종 산출물이다데이터 모델이 진정한 의사소통의 도구로서의 역할을 하게 된다.

6.     통합성(Integration): 동일한 데이터는 조직의 전체에서 한번만 정의되고 이를 여러 다른 영역에서 참조활용하는 것

 

-       엔터티의 특징

1.     반드시 해당 업무에서 필요하고 관리하고자 하는 정보

2.     유일한 식별자에 의해 식별이 가능해야 함

3.     영속적으로 존재하는 인스턴스의 집합이어야 한다.

4.     엔터티는 업무 프로세스에 의해 이용되어야 한다.

5.     엔터티는 반드시 속성이 있어야 한다.

6.     엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.

 

-       엔터티의 명명

1.     현업업무에서 사용하는 용어를 사용

2.     가능하면 약어를 사용하지 않는다.

3.     단수명사를 사용한다.

4.     모든 엔터터이에서 유일하게 이름이 부여되어야 한다.

5.     엔터티 생성의미대로 이름을 부여한다.

 

-       관계 체크사항

1.     두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?

2.     두 개의 엔터티 사이에 정보의 조합이 발생되는가?

3.     업무기술서장표에 관계연결에 대한 규칙이 서술되어 있는가?

4.     업무기술서장표에 관계연결을 가능하게 하는 동사가 있는가?

 

-       비식별자관계(부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우)를 맺는 경우

1.     자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우

2.     자식만 남겨두고 먼저 소멸될 수 있는 경우

3.     여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때

4.     자식엔터티에서 별도의 주식별자를 사용하는 것이 더 유리하다고 판단될 때

 

-       성능 데이터 모델링 고려사항

1.     데이터 모델링을 할 때 정규화를 정확하게 수행한다.

2.     데이터베이스 용량산정을 수행한다.(테이블(엔터티)별로 데이터가 대용량인지 구분하게 하기 때문에 테이블에 대한 성능고려를 엄격하게 적용해야 하는지 기준이 될 수 있음)

3.     데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

4.     용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

5.     이력모델의 조정, PK/FK 조정슈퍼타입/서브타입 조정 등을 수행한다.

6.     성능관점에서 데이터 모델을 검증한다.

 

-       로우체이닝로우 길이가 너무 길이서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태

-       로우마이그레이션데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

 

-       슈퍼/서브타입 데이터 모델의 변환타입 비교

1. one to one type: 개별테이블 유지확장성 우수함조인성능 나쁨, I/O 성능 좋음관리용이성 좋지 않음개별 테이블로 접근이 많은 경우 선택

2. Plus Type: 슈퍼+서브타입 테이블확장성 보통조인성능 나쁨, I/O 성능 좋음관리용이성 좋지않음슈퍼+서브 형식으로 데이터를 처리하는 경우 선택

3. Single Type: 하나의 테이블확장성 나쁨조인성능 우수함, I/O 성능 나쁨관리용이성 좋음전체를 일괄적으로 처리하는 경우 선택.


- 와일드카드의 종류

1. % : 0개 이상의 어떤 문자를 의미

2. _ : 1개인 단일 문자를 의미



출처: https://crosstheline.tistory.com/111?category=693092 [이거 알아영???ㅎㅎㅎ]

LIST
블로그 이미지

SeoHW

,
SMALL

---------------------------------------------------

요청한 작업을 수행하는 중 오류 발생 : 

접속 속성 : 형식 오류 : Property is 'v$session.osuser' and value is .....

업체 코드 17190

---------------------------------------------------


구글링 하고 좋다고 해봤더니 아래 내용(취소선 해놓은 내용)처럼 해도 안됐다....

진짜 문제는....저 윗부분에서 개발 PC 라고 나오는 부분에 있었다.

컴퓨터 이름이나 계정이름....한글이나 띄어쓰기, 특수문자...이딴거 넣지말자.

난 원래 안그러는데... 이 PC 쓰는 사람이 누구였는지 몰라도 이렇게 셋팅해놨었음...아오T_T


개발자들이여~PC 관련 셋팅할 때는 절대 한글을 쓰지 말라!!!!!!

아참...PC 이름 관련해서 바꾸려면 윈도우에서 '윈도우키 + R' 눌러서 실행한 후에

control userpasswords2

해서 들어간 후에 사용하고 있는 계정의 속성에 들어간 후에 사용자 이름을 바꿔주면 된다.

누차 강조한다. 맘 편하게 영어로만 띄어쓰기나 특수문자도 없이 쓰라.


아래 잘못 적어놨던 내용도 남겨는두나...

이건 내 자아성찰...을 위해 남겨둔 것이므로 굳이 참조할 필요는 없다-_-;;;



출처: http://rainny.tistory.com/139 [긍정적 사고방식^^]

LIST
블로그 이미지

SeoHW

,
SMALL

오라클 REPLACE 사용기



예제1

REPLACE('101,681',',');


결과값은


101681 로 콤마가 사라지게된다


예제2

REPLACE('101,681',',','5');


결과값은


1015681 로 된다



REPLACE(값,비교값,변환값) 으로 사용하시면됩니다

REPLACE(값,비교값) 사용시 비교값이 삭제됩니다




감사합니다

LIST
블로그 이미지

SeoHW

,
SMALL

ORACLE "% "퍼센트 구하기 자료


WITH AAA AS(

SELECT '홍길동1' NAME, 10 CNTS FROM DUAL UNION ALL

SELECT '홍길동2' NAME, 25 CNTS FROM DUAL UNION ALL

SELECT '홍길동3' NAME, 25 CNTS FROM DUAL UNION ALL

SELECT '홍길동4' NAME, 10 CNTS FROM DUAL UNION ALL

SELECT '홍길동5' NAME, 30 CNTS 


)


SELECT NAME

, ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%'  CNTS

FROM AAA

;


결과물

 

 NAME

 CNTS

 1

 홍길동1

 10%

 2

 홍길동2

 25%

 3

 홍길동3

 25%

 4

 홍길동4

 10%

 5

 홍길동5


 30%

나오게 됩니다 ㅎ


위처럼 자료가 적을경우 예외없이 정상으로 나오게됩니다

하지만

자료가 많을경우 % 퍼센트가 " .45% " 이런식으로 0.45이지만 0이 안붙어서 나오게됩니다. 그럴 경우에는 아래 처럼 하면됩니다



SELECT NAME,

DECODE(

SUBSTR(

ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%' ,1,1)

,'.'

'0' II ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%',

ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2)  II '%'

) CNTS


하시면 0.45%로 나오게 됩니다


감사합니다


LIST
블로그 이미지

SeoHW

,
SMALL

Oracle Replace 함수 생성(결과값 변환 출력)


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
CREATE OR REPLACE FUNCTION FN_REPLACE_CUST(
    IN_VALUES     IN      VARCHAR2,
    IN_TYPE         IN INT,
    IN_DELIMETER IN    VARCHAR2
)
RETURN VARCHAR2
    
/**************************************************************************
  # FN : FN_REPLACE_CUST
  # 옵션
  IN_VALUES     : 분리할 문자열 입력
  IN_TYPE        : 출력값 구분자(코드, 코드명)
  IN_DELIMITER : 분리할 구분자
**************************************************************************/
IS
    RETURN_VAL    VARCHAR2(2000); -- 결과 리턴 변수
    TMP_RET_VALUE VARCHAR2(2000);  -- 결과 임시 저장 변수
    
    SET_CODE  VARCHAR2(2000);        -- SELECT 결과 코드 저장 
    SET_CODE_NAME VARCHAR2(2000); -- SELECT 결과 코드명 저장
     
BEGIN
    
   -- IN_VALUES의 값이 없으면 빈 값을 리턴하고 종료
    IF LENGTH(LTRIM(RTRIM(IN_VALUES))) = 0 THEN
        RETURN '';
    END IF;
    
   FOR ForResult IN
    (
     WITH T AS
      (
        SELECT IN_VALUES AS SET_VALUES FROM DUAL -- 입력받은 문자열 임시 테이블 처리
       )
       /* 문자열을 분리하여 세로로 추출 */
       SELECT TRIM(REGEXP_SUBSTR(SET_VALUES, '[^'||IN_DELIMETER||']+', 1, LEVEL)) AS SET_VALUES
         FROM T
         CONNECT BY INSTR(SET_VALUES, ''||IN_DELIMETER||'', 1, LEVEL - 1) > 0
    )
    LOOP
            /* COMMON_CODE 의 코드 값과 비교후 결과값 대입 */
            SELECT CODE_M, CODE_M_NAME
                INTO SET_CODE, SET_CODE_NAME
                FROM COMMON_CODE
                WHERE CODE_L = '005'
                AND CODE_M = ForResult.SET_VALUES;
                  
            /* # IN_TYPE 구분값에 따라 코드번호, 코드명 추출 */
            IF IN_TYPE = 1 THEN
                TMP_RET_VALUE := SET_CODE;
            ELSIF IN_TYPE = 2 THEN
                TMP_RET_VALUE := SET_CODE_NAME;
            END IF;
                  
            /* # 결과값 저장 : 결과값 가로 배치 */
            IF RETURN_VAL IS NULL THEN
                    RETURN_VAL := TMP_RET_VALUE;
               ELSE
                    RETURN_VAL := RETURN_VAL||','||TMP_RET_VALUE;
            END IF;
    END LOOP;
    
    RETURN RETURN_VAL; -- 결과 리턴
    
    EXCEPTION
         WHEN OTHERS THEN
--              RETURN SQLERRM;
            RETURN IN_VALUES; -- 에러 또는 조인 결과값 없을시 기본 입력받은 값 리턴
    
END FN_REPLACE_CUST;
/



> 생성후 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- # IN_TYPE : 1
SELECT ORG_TYPE, FN_REPLACE_CUST(ORG_TYPE, 1, '|') AS REPLACE_VALUES
    FROM USER_INFO
;       
 
ORG_TYPE         REPLACE_VALUES
--------------------------------------------
101|102|103|104    101,102,103,104
 
 
-- # IN_TYPE : 2
SELECT ORG_TYPE, FN_REPLACE_CUST(ORG_TYPE, 2, '|') AS REPLACE_VALUES
    FROM USER_INFO
;    
 
ORG_TYPE         REPLACE_VALUES
--------------------------------------------
101|102|103|104    가수,작곡가,작사가,기타


LIST
블로그 이미지

SeoHW

,
SMALL

SELECT TRIG.TRIGGER_NAME "Trigger",

               TRIG.STATUS "Status",

               ALLO.STATUS "Validation",

               TRIG.TABLE_NAME "Table",

               TRIG.TABLE_OWNER "Table Owner"

          FROM SYS.ALL_OBJECTS ALLO,

               SYS.ALL_TRIGGERS TRIG

         WHERE ALLO.OBJECT_TYPE   = 'TRIGGER'

               AND ALLO.OBJECT_NAME   = TRIG.TRIGGER_NAME

               AND ALLO.OWNER         = TRIG.OWNER

        order by TRIG.TRIGGER_NAME asc;



하면


모든 테이블의 트리거가 출력됩니다



트리거의 삭제, 활성화, 비활성화

  • 삭제

    • DROP TRIGGER trigger-name;
  • 비활성화

    • ALTER TRIGGER trigger-name DISABLE;
  • 활성화

    • ALTER TABLE trigger-name ENABLE;
  • 특별한 테이블에 대한 모든 트리거의 활성/비활성화

    • ALTER TABLE students ENABLE ALL TRIGGERS;
    • ALTER TABLE students DISABLE ALL TRIGGERS;


LIST
블로그 이미지

SeoHW

,
SMALL

ORA-02292 에러는 현재 삭제할려는 테이블의 데이타가 다른 테이블의 데이타의 PK값일 경우에 생긴다.

 

쉽게 말하자면 A값을 없앨려면 먼저 B값을 없애야 한다는 거다.

 

첨에 헤매었는데 이걸 대처할려면 일단 삭제할 데이타에 대한 쿼리를 PL/SQL에 실행시켜 본다

 

그럼

 

21:57:43 Error: ORA-02292: 무결성 제약조건(TMYUGA.SYS_C0036932)이 위배되었습니다- 자식 레코드가 발견되었습니다

이런식으로 에러가 뜬다. SYS_C0036932 값을 소중히 카피한다.

 

그런 다음에 아래 쿼리를 실행한다. 토시하나 바꾸지 말고 사용하자..

 

select CONSTRAINT_NAME, TABLE_NAME, R_CONSTRAINT_NAME
from user_constraints
where CONSTRAINT_NAME = 'SYS_C0036932' 

 

이런식으로 쿼리를 던지면 삭제해야 할 데이타의 테이블 명이 보인다.

 

그 테이블에 데이타를 유심히 살펴보면 삭제해야할 데이타 값이 살짝히 보인다. 그걸 삭제하고 진짜 지우려는 데이타를 삭제하면 만사 OK



출처: http://hclee2575.tistory.com/43 [순수한 소년의 스토리]

LIST
블로그 이미지

SeoHW

,
SMALL

개발자가 가장 미치는 상황중 하나는

 

내꺼에선 잘되는데 서버에 올리는 포팅만 하면 안되는 상황일 것이다.

 

그중 대표적인것중 하나가

 

ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 

ORA-01861: literal does not match format string 

 

바로 이 에러...

 

 

toad나 sqlgate 에선 잘만되는게 서버에만 올리면 안되는 미치는 상황이다.

 

일단, 원인은 TO_DATE와 TO_CHAR의 함수에 날짜형식을 지정하지 않았을 때

 

기본값으로 지정되는 형식이 달라서 그렇다.

 

TO_DATE('2014-01-01', 'YYYY-MM-DD') 이런식으로 쓰는데 두번째 인수인 'YYYY-MM-DD'를

 

생략해버리면 환경에 따라 서로 다른값이 지정되므로 최악의 경우

 

TO_DATE('2014-01-01', 'DD-MON-RR')  이런식으로 기본값이 들어가며 실행되는 경우가 생겨서 

 

위와같은 ORA-01861 오류가 생기는 것이다.

 

 

 

물론 최선의 해결책은 TO_DATE와 TO_CHAR를 쓸 때에는 항상 데이터형식을 지정하는 것이지만,

 

개발이라는게 어찌그리 되는가? 분명 어딘가에서는 빼먹기 마련인데,

 

빼먹은것이 서버에 올라갈때까지 발견 안된다는건 너무 위험한 상황이다.

 

 

게다가 저 에러는 뷰 내부나 저장프로시저 내부에서 빼먹어도 에러가 난다!

 

 

한마디로 내 소스 전체에서 TO_DATE나 TO_CHAR로 전체검색 한다고 찾아지는 문제가 아니란 의미.

 

그러므로 서버 환경을 내 로컬환경에도 맞춰서(!!) 서버에서 나는 에러는 나도 나는 상황이

 

더 좋은 개발환경이라고 생각된다.

 

 

 

그러니 한번이라도 서버에 sqlplus로 접속을 해서

 

SELECT * FROM nls_session_parameters WHERE PARAMETER LIKE '%DATE%' OR PARAMETER LIKE '%LANG%'; 

 

이 쿼리를 한번 날려서 서버가 어떤값들이 사용되고 있는지 알아내자.

 

 

 

서버 sqlplus로 접속하기 어렵다면,

 

저쿼리를 실행하는 프로그램을 짜서 서버에 포팅해서 실행해 버리자.

 

아무튼 그런식으로 서버 환경값을 다 알아낸 다음에

 

내 환경도 서버랑 같게 맞춘다.

 

 

 

여기서 주의할것은 NLS_DATE_FORMAT 값 한개만 맞춘다고 되는게 아니라

 

NLS_LANGUAGE, NLS_DATE_LANGUAGE 까지 총 3개 전부 맞춰야 한다. 

 

 

 

일단 토드에서도 서버랑 같은 에러가 나는것이 속편함으로

 

토드 실행 후에 

 

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN'; 

 

이런식으로 한번 쿼리를 (물론 저 값을은 서버값으로 맞춘다)  날린다음에

 

오류가 나는 쿼리를 실행해보면 서버에서 나던 오류가 내 토드에서도 나는것을 확인할 수 있다.

 

 

 

아에 세션 전체나 접속환경차원에서 저값을 고정시키는 방법도 있지만

 

그 방법은 검색하면 나온다....... 하지만

 

TO_CHAR, TO_DATE의 두번째 인수를 항상 지정하는 버릇을 들이기 위해서라도

 

나는 일부러 고정하지 않고 있다.

 

출처 : https://m.blog.naver.com/PostView.nhn?blogId=jeemin5&logNo=220141590502&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

LIST
블로그 이미지

SeoHW

,
SMALL

oracle in 사용예시입니

SELECT

                     *

                     FROM TN_test

                where FN_member =  '14111417002560' 

                AND fn_lectureseq =  '13181' 

                AND FN_DELETEYN = 'N'

                AND FN_APPSTATE in('1','2','5')

FN_APPSTATE 이 1,2,5  인것만 뽑아오는 것입니다


NOT IN 사용 예시 입니다

SELECT

                     *

                     FROM TN_test

                where FN_member =  '14111417002560' 

                AND fn_lectureseq =  '13181' 

                AND FN_DELETEYN = 'N'

                AND FN_APPSTATE not in('1','2','5')

FN_APPSTATE 1,2,5 아닌것만 뽑아오는 예시입니다

LIST
블로그 이미지

SeoHW

,