[Oracle] Trigger


테이블에 어떤 이벤트가 발생 시, 기록을 남길 수 있는 명령어.


commit, rollback을 수행할 수 없다.


CREATE OR REPLACE TRIGGER Trigger_Name 


timming[ BEFORE | AFTER ] event [ INSERT | UPDATE | DELETE ]


ON Table_Name


Begin

실행명령;

End;





'IT Info > Oracle' 카테고리의 다른 글

[Oracle] CASE WHEN THEN  (0) 2019.12.05
[Oracle] Decode  (0) 2019.12.02
[Oracle] 데이터 중복 제거 distinct, group by  (0) 2019.11.26
[Oracle] MERGE INTO  (0) 2019.11.20
[Oracle] INSERT, UPDATE, DELETE  (0) 2019.11.20


[Oracle] 데이터 중복 제거 distinct, group by


데이터 중복에 대해서 제거하는 방법으로 2가지가 존재한다.



DISTINCT


SELECT DISTINCT COLUMN1, COLUMN2

FROM TABLE_NAME


장점 : 사용법이 간편함

단점 : TEMP TABLESPACE에 임시로 저장하고 작업하는 방식으로 시스템에 부하를 줄 수 있음



GROUP BY 


SELECT A.COLUMN1, A.COLUMN2

FROM TABLE_NAME A

GROUP BY A.COLUMN1, A.COLUMN2


장점 : DISTINCT에 비해 속도가 빠르고 시스템 부하를 덜 줌

단점 : 사용법이 조금 복잡함.



중복 데이터가 어떤 것이지 찾고자 하는 경우


SELECT COUNT(*), A.COLUMN1

WHERE TABLE_NAME A

GROUP BY A.COLUMN1

HAVING COUNT(*) > 1




'IT Info > Oracle' 카테고리의 다른 글

[Oracle] Decode  (0) 2019.12.02
[Oracle] Trigger  (0) 2019.12.02
[Oracle] MERGE INTO  (0) 2019.11.20
[Oracle] INSERT, UPDATE, DELETE  (0) 2019.11.20
[Oracle] View Table  (0) 2019.11.16

[Oracle] MERGE INTO


이미 존재하면 데이터를 UPDATE 하고, 없는 경우는 INSERT를 해야하는 경우가 발생한다. 특히 Migration 작업을 할 때..

그런 경우 MERGE INTO를 사용하면 편하다.


MERGE INTO Table_Name A

USING Table || View || SubQuery B

ON ( A = B ) -- Key값으로 반드시 조인

WHEN MATCHED THEN INSERT || UPDATE || DELETE

WHEN NOT MATCHED THEN INSERT || UPDATE || DELETE






'IT Info > Oracle' 카테고리의 다른 글

[Oracle] Trigger  (0) 2019.12.02
[Oracle] 데이터 중복 제거 distinct, group by  (0) 2019.11.26
[Oracle] INSERT, UPDATE, DELETE  (0) 2019.11.20
[Oracle] View Table  (0) 2019.11.16
[Oracle] ORA-00904 : invalid identifier  (0) 2019.11.14

[Oracle] INSERT, UPDATE, DELETE


INSERT : TABLE ROW 추가


INSERT INTO Table_name(column1, column2,...) VALUES(value1, value2,...);


Ex)

INSERT INTO USERINFO(NAME, ADDRESS) VALUES('홍길동', '제주도 한라산');



UPDATE : TABLE ROW 수정


UPDATE Table_name SET column1 = value1, column2 = value2 WHERE 조건;


Ex)

UPDATE USERINFO SET ADDRESS = '강원도 설악산' WHERE NAME = '홍길동';



DELETE : TABLE ROW 삭제


DELETE FROM Table_name WHERE 조건;


Ex)

DELETE FROM USERINFO WHERE NAME = '홍길동' AND ADDRESS = '강원도 설악산';



'IT Info > Oracle' 카테고리의 다른 글

[Oracle] 데이터 중복 제거 distinct, group by  (0) 2019.11.26
[Oracle] MERGE INTO  (0) 2019.11.20
[Oracle] View Table  (0) 2019.11.16
[Oracle] ORA-00904 : invalid identifier  (0) 2019.11.14
[Oracle] Delete 데이터 복구  (0) 2019.11.13

[Oracle] View Table


View 


물리적인 테이블에 근거한 논리적인 가상  테이블? 말이 어렵다..


업무적으로 봤을 때, 다른 계정에서 직접 물리적인 테이블을 조회하면 보안상에 문제(테이블을 그대로 제공하면 테이블의 모든 데이터를 볼 수 있기 때문


에)가 발생할 수 있으므로, 필요한 정보만을 제공할 수 있도록 가상의 테이블을 사용한다고 보면 된다.(개인적인 의견입니다....)


View 테이블을 제공하게 되면 제공하고자 하는 정보만 타시스템에서 볼 수 있기 때문에, 타시스템에서 정보가 더 필요하다고 하면 View에 제공할 컬럼을 


추가해줘야되니, 처음 협의할 때, 필요한 정보를 명확하게 받아두는 것이 번거롭지 않다.



View Table 생성


CREATE OR REPLACE VIEW View_Name AS

[SELECT 문];


**REPLACE : 이미 생성된 VIEW에 수정사항이 발생하는 경우, REPLACE를 사용하면 같은 이름의 VIEW 테이블을 업데이트 한다.



예를 들자면 아래와 같다.


CREATE OR REPLACE VIEW INSA_VIEW AS

SELECT A.NAME, A.TELNO, B.HOMEADRESS

FROM USERINFO A, ADDRESSINFO B

WHERE A.USER_ID = B.USERLINK_ID;




생성하게 되면, 아래와 같이 SELECT 문으로 조회하면 조회가 된다.


SELECT * FROM INSA_VIEW;



단, 다른 계정에서 조회를 하기 위해서는 권한을 부여해주어야 한다.


GRANT SELECT ON VIEW TO USER명;



'IT Info > Oracle' 카테고리의 다른 글

[Oracle] MERGE INTO  (0) 2019.11.20
[Oracle] INSERT, UPDATE, DELETE  (0) 2019.11.20
[Oracle] ORA-00904 : invalid identifier  (0) 2019.11.14
[Oracle] Delete 데이터 복구  (0) 2019.11.13
[Oracle] Single Quotation(홀따옴표) ' Insert  (0) 2019.11.12

[Oracle] ORA-00904 : invalid identifier


어떻게 보면 아주 간단한 에러이지만, 가장 자주 볼 수 있는 에러(꼼꼼한 성격이 못된다면....)


부적합한 식별자를 입력하여 Error가 발생했다는 의미로, 컬럼 명 또는 테이블 명을 제대로 입력하였는지 확인이 필요하다.



[Oracle] Delete 데이터 복구


신입사원 시절, 테이블 전체를 날려버려 식겁했던 기억이 있다.


당황하지 말고 차분하게 해결하자!!


중요한 건 문제가 발생했을 때, 사수에게 혼날까봐 숨기지 말 것!!!!!



1. 삭제 된 데이터를 찾는다.


SELECT *

FROM Table_name AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '30' MINUTE)

WHERE ~



2. 삭제 된 데이터를 다시 INSERT 한다.


INSERT INTO Table_name

SELECT

FROM Table_name AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '30' MINUTE)

WHERE ~


COMMIT;




[PL/SQL Developer] 환경 설정


[Configure] - [Preferences] 에서 기본 환경 설정하는 부분은 아래와 같다.(일반적으로 설정하는 것들)


1. [Oracle] - [Connection] Session 접속 유지



2. [Oracle] - [Logon History] Password 저장




3. [User Interface] - [Appearance] UI


Switch to Menu





Switch to Ribbon




개인적으로 Menu 방식으로 보는 것이 편하여, Switch to Menu로 설정하였다. 


4. [SQL Window] 

- AutoSelect statement : SQL 실행 시, 현재 CURSOR가 존재하는 SQL문장만 수행(세미콜론 단위로 수행)

- Null Value cell color : Null 값인 Cell의 경우 컬러 변경

- Alternate row color : 결과값 row 색상 번갈아가며 표시

- Records per Page - Fixed check, insert 100 : row data 기본 최대 100으로 지정




이 정도로 셋팅을 하면 기본적인 셋팅은 완료되었다고 볼 수 있겠다....나만의 착각?!



+ Recent posts