이건 스풀뜬거
SQL> spool
plsqltest.LST에 스풀 중입니다.
SQL> DESC DBMS_OUTPUT
PROCEDURE DISABLE
PROCEDURE ENABLE
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
BUFFER_SIZE NUMBER(38) IN DEFAULT
PROCEDURE GET_LINE
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
LINE VARCHAR2 OUT
STATUS NUMBER(38) OUT
PROCEDURE GET_LINES
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
LINES TABLE OF VARCHAR2(32767) OUT
NUMLINES NUMBER(38) IN/OUT
PROCEDURE GET_LINES
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
LINES DBMSOUTPUT_LINESARRAY OUT
NUMLINES NUMBER(38) IN/OUT
PROCEDURE NEW_LINE
PROCEDURE PUT
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
A VARCHAR2 IN
PROCEDURE PUT_LINE
인수명 유형 기본 내부/외부?
------------------------------ ----------------------- --------- --------
A VARCHAR2 IN
SQL> --이것도 패키지
SQL> --프로지져 모아놓은것이 패키지 비용절감 관리 수월~
SQL> --오버로딩도 지원한다
SQL> --IS만나기 전까지만 복사해서 패키지를 만들면 된다
SQL> --바디에서 실제로 만들어진다
SQL> @C:\PLSQL\090930_01.SQL
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> CREATE TABLE CDEPT
2 AS
3 SELECT * FROM DEPT;
테이블이 생성되었습니다.
SQL> SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> SELECT * FROM CDEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --트리거를 만들기 앞서 테이블을 복사
SQL> INSERT INTO CDEPT
2
SQL> --DEPT에 넣으면 CDEPT도 들어가야지
SQL> @c:\plsql\091001_trigger.sql
트리거가 생성되었습니다.
SQL> --트리거 생성되었으니 다른곳에 cdept에 한 번 넣어보자
SQL> insert into cdept
2 values(50,'영업부','seoul');
1 개의 행이 만들어졌습니다.
SQL> --한곳에 넣었으니 이제 다른곳도 확인해보자
SQL> select * from cdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 영업부 seoul
SQL> --cdept에 insert를 해주었으니 당연히 영업부가 들어가있다
SQL> --그럼 dept는??
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 영업부 seoul
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --역시 dept에도 트리거를 했으므로 insert를 안해줘도 들어간게 되었다
SQL> @c:\plsql\091001_trigger_up.sql
트리거가 생성되었습니다.
SQL> select * from cdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 영업부 seoul
SQL> update cdept set dname='개발부' where deptno=50;
1 행이 갱신되었습니다.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 개발부 seoul
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --cdept를 바꾸니 dept도 바뀌었다
SQL> update dept set dname='인사부' where deptno=50;
1 행이 갱신되었습니다.
SQL> select * from cdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 seoul
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 인사부 seoul
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --왜 순서가 바뀌면 안바뀌는 거지??
SQL> --자기가 트리거를 해주면 안된다
SQL> --즉 일단은 cdeptno가 먼저 되는것.
SQL> @c:\plsql\091001_trigger_del.sql
경고: 컴파일 오류와 함께 트리거가 생성되었습니다.
SQL> show error
TRIGGER DEL_CDEPT에 대한 오류:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/2 PL/SQL: SQL Statement ignored
2/14 PL/SQL: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
SQL> drop del_cdept;
drop del_cdept
*
1행에 오류:
ORA-00950: DROP 옵션이 부적합합니다
SQL> drop trigger del_cdept;
트리거가 삭제되었습니다.
SQL> @c:\plsql\091001_trigger_del.sql
트리거가 생성되었습니다.
SQL> select * from cdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 seoul
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 인사부 seoul
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> delete from dept where deptno=50;
1 행이 삭제되었습니다.
SQL> select * from cdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 개발부 seoul
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> delete from cdept where deptno=50;
1 행이 삭제되었습니다.
SQL> insert into cdept values(50,'개발부','서울');
1 개의 행이 만들어졌습니다.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 개발부 서울
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> delete from cdept where deptno=50;
1 행이 삭제되었습니다.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --역시 cdept를 먼저 지워야 dept도 지워진다
SQL> --실험한 결과 아직은 cdept가 먼저 실행이 되어야 dept에도 적용이 된다
SQL> desc user_triggers
이름 널? 유형
----------------------------------------- -------- ----------------------------
TRIGGER_NAME VARCHAR2(30)
TRIGGER_TYPE VARCHAR2(16)
TRIGGERING_EVENT VARCHAR2(227)
TABLE_OWNER VARCHAR2(30)
BASE_OBJECT_TYPE VARCHAR2(16)
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
REFERENCING_NAMES VARCHAR2(128)
WHEN_CLAUSE VARCHAR2(4000)
STATUS VARCHAR2(8)
DESCRIPTION VARCHAR2(4000)
ACTION_TYPE VARCHAR2(11)
TRIGGER_BODY LONG
SQL> --내가 만든 트리거 정보 볼때
SQL> select trigger_name, trigger_type
2 from user_triggers
3 ;
TRIGGER_NAME TRIGGER_TYPE
------------------------------ ----------------
INS_DEPT AFTER EACH ROW
UP_CDEPT AFTER EACH ROW
DEL_CDEPT AFTER EACH ROW
SQL> drop trigger ins_dept;
트리거가 삭제되었습니다.
SQL> drop trigger up_cdept;
트리거가 삭제되었습니다.
SQL> drop trigger del_cdept;
트리거가 삭제되었습니다.
SQL> --트리거도 오프젝트이다
SQL> @c:\plsql\091001_trigger_dml.sql
경고: 컴파일 오류와 함께 트리거가 생성되었습니다.
SQL> show error
TRIGGER DML_CDEPT에 대한 오류:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/14 PLS-00103: 심볼 "UPDATEING"를 만났습니다 다음 중 하나가 기대될
때: := .
( @ % ;
11/14 PLS-00103: 심볼 "DELETING"를 만났습니다 다음 중 하나가 기대될
때: := . (
@ % ;
15/4 PLS-00103: 심볼 ";"를 만났습니다 다음 중 하나가 기대될 때: if
SQL> drop trigger dml_cdept;
트리거가 삭제되었습니다.
SQL> @c:\plsql\091001_trigger_dml.sql
트리거가 생성되었습니다.
SQL> SELECT * FROM CDEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> INSERT INTO CDEPT VALUES(50,'개발부','서울');
1 개의 행이 만들어졌습니다.
SQL> SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
50 개발부 서울
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> DROP TRIGGER DML_CDEPT;
트리거가 삭제되었습니다.
SQL> DROP TABLE CDEPT;
테이블이 삭제되었습니다.
SQL> CONN SYSTEM/TEST
연결되었습니다.
SQL> GRANT CREATE VIEW TO SCOTT;
권한이 부여되었습니다.
SQL> CONN SCOTT/TIGER
연결되었습니다.
SQL> CREATE VIEW CDEPT
2 AS
3 SELECT * FROM DEPT;
뷰가 생성되었습니다.
SQL> SELECT * FROM CDEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
50 개발부 서울
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> --view 권한주기 ...
SQL> insert into cdept values(60,'test','test');
1 개의 행이 만들어졌습니다.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
50 개발부 서울
60 test test
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
6 개의 행이 선택되었습니다.
SQL> --view를 실행하면 서브커리처럼 실행한다
SQL> --실제적인 메모리는 없다는 뜻이다
SQL> --view 로만 만들면 끝나는거지
SQL> conn system/test
연결되었습니다.
SQL> alter user system identified by oracle;
사용자가 변경되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> -- scott
SQL> --emp<=dml권한?
SQL> --object모든 권한 ==>창조자..
SQL> --09:00~18:00 dml이 가능하고 그외에는 불가한다
SQL> --이런식으로 만들어서 규정을 지울수도
SQL>
SQL> SELECT SYSDATE FROM DUAL
2 ;
SYSDATE
--------
09/10/01
SQL> @c:\plsql\091001_trigger_sec.sql
트리거가 생성되었습니다.
SQL> conn system/oracle
연결되었습니다.
SQL> --다시
SQL> drop trigger sec_emp;
drop trigger sec_emp
*
1행에 오류:
ORA-04080: 트리거 'SEC_EMP'가 존재하지 않습니다
SQL> conn scott/tiger
연결되었습니다.
SQL> drop trigger sec_emp;
트리거가 삭제되었습니다.
SQL> conn system/oracle
연결되었습니다.
SQL> @c:\plsql\091001_trigger_sec.sql
트리거가 생성되었습니다.
SQL> CONN SCOTT/TIGER
연결되었습니다.
SQL> UPDATE EMP
2 SET SAL=100;
UPDATE EMP
*
1행에 오류:
ORA-20001: 낮에 일하세요 야근 절대불가
ORA-06512: "SYSTEM.SEC_EMP", 줄 4에서
ORA-04088: 트리거 'SYSTEM.SEC_EMP'의 수행시 오류
SQL> --SYSTEM에서 트리거를 만들었기 때문에 SCOTT에서는 사용을 못하는것이다
SQL> --즉 내가 입력한 시간에서는 절대로 SCOTT에서 할 수 없는것이다
SQL> --내가 SYSTEM에서 계정을 했으니깐 내가 주인이다
SQL> --이렇게 트리거는 보안을 위해서 사용이 된다
SQL> USER NAME;
SP2-0042: 알 수 없는 명령어 "USER NAME" - 나머지 줄 무시.
SQL> --현재 이것을 시간을 자꾸 확인하겠지
SQL> CONN SYSTEM/ORACLE
연결되었습니다.
SQL> ALTER TRIGGER SEC_EMP DISABLE;
트리거가 변경되었습니다.
SQL> CONN SCOTT/TIGER
연결되었습니다.
SQL> UPDATE EMP
2 SET SAL=100;
14 행이 갱신되었습니다.
SQL> ROLLBACK;
롤백이 완료되었습니다.
SQL> --DISABLE을 만들어서 트리거가 있지만 사용을 안한다고 지정해줌
SQL> --나중에 보안사항이 생기면 INABLE을 상요하면 된다
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 80/12/17 800
20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300
30
7521 WARD SALESMAN 7698 81/02/22 1250 500
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7566 JONES MANAGER 7839 81/04/02 2975
20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400
30
7698 BLAKE MANAGER 7839 81/05/01 2850
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 81/06/09 2450
10
7788 SCOTT ANALYST 7566 87/04/19 3000
20
7839 KING PRESIDENT 81/11/17 5000
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7844 TURNER SALESMAN 7698 81/09/08 1500 0
30
7876 ADAMS CLERK 7788 87/05/23 1100
20
7900 JAMES CLERK 7698 81/12/03 950
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 81/12/03 3000
20
7934 MILLER CLERK 7782 82/01/23 1300
10
14 개의 행이 선택되었습니다.
SQL> SPOOL OFF
'산자부 oracle' 카테고리의 다른 글
oracle 구조 (0) | 2009.10.08 |
---|---|
회사들어가서 오라클 계정및 경로 확인하기 (0) | 2009.10.08 |
select update의 과정을 보자^^ (0) | 2009.10.07 |
editplus function 만들기 (0) | 2009.09.28 |
산자부 test2는 function 만든것. (0) | 2009.09.28 |