2012-10-07

DBMS/오라클] 오라클 트리거 작성 예


CREATE SEQUENCE 이름
[ INCREMENT BY n ]
[ START WITH n ]
[ {MAXVALUE n | NOMAXVALUE} ]
[ {MINVALUE n | NOMINVALUE} ]
[ {CYCLE | NOCYCLE} ]
[ {CACHE n | NOCACHE} ]
-----------------------------------------------------


SQL> CREATE [ PUBLIC ] SYNONYM 시노님 명
FOR 오브젝트 명 ;
-----------------------------------------------------


CREATE [OR REPLACE] TRIGGER trigger명
timing event1 [OR event2 ...] OF 칼럼명 ON 테이블명
[FOR EACH ROW]
PL/SQL 블록
-----------------------------------------------------

실예:]

CREATE OR REPLACE TRIGGER time_emp
BEFORE insert OR update OR delete ON s_emp
BEGIN
IF to_char(sysdate,'hh24') NOT BETWEEN '09' AND '12' THEN
raise_application_error(-20201,'시간이 끝났음');
END IF;
END;
/
==============================================================
CREATE OR REPLACE TRIGGER up_emptemp
AFTER UPDATE OF SALARY ON s_emp
FOR EACH ROW
BEGIN
UPDATE EMPTEMP
SET salary =:NEW.salary
WHERE id = :OLD.id ;
END;
/
==============================================================
CREATE OR REPLACE TRIGGER ord_total
AFTER INSERT OR DELETE OR
UPDATE OF price, quantity ON s_item
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE s_ord
SET total = NVL(total,0)+NVL(:NEW.price * :NEW.quantity,0)
WHERE id = :NEW.ord_id;
ELSIF DELETING THEN
UPDATE s_ord
SET total = NVL(total,0)-NVL(:OLD.price * :OLD.quantity,0)
WHERE id = :OLD.ord_id;
ELSE
UPDATE s_ord
SET total = NVL(total,0)-NVL(:OLD.price * :OLD.quantity,0)
+NVL(:NEW.price * :NEW.quantity,0)
WHERE id = :NEW.ord_id;
END IF;
END;
/

DBMS/오라클] 테이블 리스트 보기


select *
from dictionary



select *
from all_all_tables

select *
from user_tables;

--//현재 사용자 정보
select *
from user_users


--// 사용자 테이블의 이름과 설명.
select *
from user_tab_comments


select *
from user_tab_privs

--// 사용자테이블리스트와 해당 테이블의 컬럼명 및 속성.
select *
from user_tab_cols

select *
from user_tab_columns

select *
from user_tab_col_statics




--// 오라클에서 데이터딕셔너리에서 사용자 테이블의 이름 가져오는 쿼리
select rownum, aat.*
from all_all_tables aat
where aat.owner ='LASADM'  


select table_name, column_name, data_type, data_length, nullable,  data_default
from cols  --// user_tab_columns  ==> cols  와 동일
where table_name = 'BL_TB_LAW_CONTRACT_MF'


--// 사용자 테이블의 이름과 설명.
select *
from user_tab_comments


--// 오라클에서 데이터딕셔너리에서 사용자 테이블의 정보 가져오는 쿼리

select rownum, utc.table_name, utc.column_name, utc.data_type, utc.data_length, utc.nullable,  utc.data_default, acc.comments
from cols utc --// user_tab_columns utc ==> cols utc 와 동일
join all_col_comments acc
on utc.table_name = acc.table_name
and utc.column_name = acc.column_name
--where utc.table_name = 'BL_TB_LAW_CONTRACT_MF'

DBMS/오라클] 주차 구하기


--// 오라클 주차 구하는 쿼리
SELECT TO_CHAR(SYSDATE,'WW') AS WEEK FROM DUAL;

DBMS/오라클] 오라클_테이블및_오브젝트_생성일자확인쿼리


DBA 계정으로 접속
다음의 명령을 실행 하면 생성한 오브젝트(테이블, 프로시저, 트리거 등) 의 
생성일자(CREATED), 최종 수정일자(LAST_DDL_TIME)를 확인 가능합니다. 

SELECT * 
FROM SYS.DBA_OBJECTS
WHERE OWNER LIKE DBUSER_NAME

DBMS/오라클]3489347_오라클_LOCK_확인_프로시저


select *
from v$session s, v$lock l, dba_objects o
where s.sid= l.sid and o.object_id = l.id1 and s.username is not null;



select a.sid, a.serial#, a.username, a.process, b.object_name,
decode(c.lmode, 2, 'RS', 3, 'RX',
4, 'S', 5, 'SRX', 8, 'X', 'NO') TABLE_LOCK,
decode(a.command, 2, 'INSERT',3, 'SELECT',6, 'UPDATE',
7, 'DELETE', 12, 'DROP',6, 'LOCK', 'unknown') SQL,
decode(a.lockwait, NULL, 'No Wait', 'Wait') STATUS
from V$SESSION a, DBA_OBJECTS b, V$LOCK c
where a.sid = c.sid and b.object_id = c.id1
and c.type = 'TM'
and a.username = 'NIOTALKUSER'
;



select substr(c.object_name,1,20),a.sid,a.serial#
from v$session a, v$lock b, dba_objects c
where a.sid = b.sid
and b.id1 = c.object_id
and b.type='TM';



SELECT SUBSTR(S.USERNAME, 1,11) "ORACLE USER", P.PID "PROCESS ID", S.SID "SESSION ID", S.SERIAL#, OSUSER "OS USER", P.SPID "PROC SPID",
    S.PROCESS "SESS SPID", S.LOCKWAIT "LOCK WAIT"
FROM V$PROCESS P, V$SESSION S, V$ACCESS A
WHERE A.SID = S.SID
AND P.ADDR = S.PADDR
AND S.USERNAME != 'SYS'

DBMS/오라클] 오라클에서 해당 데이타베이스의 테이블 리스트 보는 명령어.


--// 오라클에서 해당 데이타베이스의 테이블 리스트 보는 명령어.
select * from dba_tables

/


// 오라클에서 해당 테이블의 컬럼 명
select * from USER_TAB_COLUMNS where table_name = '대문자테이블명';
/

select * from dba_objects WHERE OWNER='NCHANNEL' AND OBJECT_TYPE = 'INDEX';
/
select * from dba_objects WHERE OWNER='NCHANNEL' AND OBJECT_TYPE = 'TABLE';

DBMS/오라클]_권한_부여_생성_sql스크립트


--// 특정 테이블만 제외하고 select 권한주기

select 'grant select  on '||table_name||' to 유저명;'
from ALL_TABLES /* select 권한만 */ .. 혹은
--from user_tables
where owner in ('유저01','유저02','유저03')  /* 원본 유저 리스트 */
AND table_name  NOT IN ('테이블1 ','테이블2'); /* 권한 제외할 테이블 리스트 */



--// billuser 에게 현재 로그인한 사용자의 모든 테이블에 대한 select 권한 주는쿼리문 생성
select 'grant select on ' || table_name || ' to billuser;' a
from user_tables
order by a
;