Database/Oracle PLSQL: 26개의 글
1. 패키지를 사용해야 하는 이유 1) 정보 은닉화 2) 유지보수의 용이성 3) 성능 향상 4) 오버로딩 가능 2. 패키지 구성요소 1) 명세 (spec) : body 에서 구현 할 프로시저, 함수, 전역변수의 이름을 선언 2) 몸체 (body): 실제 구현코드 ( 프로시저 , 함수 ) 3. 패키지의 오버로딩 명세 (spec) 예제 CREATE OR REPLACE PACKAGE OVER_PACKISPROCEDURE ADD_DEPT( P_DEPT_NO IN DEPT.DEPT_NO%TYPE , P_DEPT_NM IN DEPT.DEPT_NM%TYPE DEFAULT 'UNKNOWN', P_LOC IN DEPT.LOC%TYPE DEFAULT 0); PROCEDURE ADD_DEPT( P_DEPT_NM IN DEP..
CREATE TABLE LOGIN_INFO ( USER_ID VARCHAR2(20), LOGIN_DATE DATE, ACTION VARCHAR2(50) ); 1. 오라클에 접속할 때마다 LOGIN_INFO 테이블에 접속정보가 남겨지게 하시오. CREATE OR REPLACE TRIGGER LOGIN_INFO AFTER LOGON ON DATABASEBEGIN INSERT INTO LOGIN_INFO VALUES ('CHPARK',TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),'로그인 액션 취함');END;/ 2. DB를 SHUTDOWN 하기 전에 LOGIN_INFO 테이블에 접속정보가 남겨지게 하시오. CREATE OR REPLACE TRIGGER LOGIN_INFO BEFORE SHU..
1. Trigger (트리거) 의 종류 1) DML 트리거 2) DDL 트리거 3) DB 작업에 대한 트리거 ( log on, log off, startup, shutdown ) 트리거란 ? 1) INSERT, UPDATE, DELETE 문이 TABLE에 대해 묵시적으로 수행되는 PROCEDURE이다. 2) 트리거는 TABLE과는 별도로 DATABASE에 저장된다. 3) 트리거는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의될 수 있다. 4) 행트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길 때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다. 5) 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어할 수 없다. ======================..
Oracle 스키마 확인 ※ Oracle SID 확인 SQL> select instance from v$thread; ※ Oracle DB_NAME 확인 SQL> select name from v$database; ※ Oracle User 확인 SQL> select * from all_users; ※ 등록된 User 목록 보기 SQL> select username, user_id from dba_users order by username; ※ User가 소유한 모든 테이블 보기 SQL> select table_name from user_tables; ※ 사용자 정보 확인 SQL> select username, default_tablespace,temporary_tablespace from dba_user..
1. RAISE_APPLICATION_ERROR를 사용하여 오류코드 -20000부터 -20999의 범위 내에서 사용자 정의 예외를 만들 수 있다. - STEP 1: DECLARE OR IS ... 예외의 이름을 선언 (선언절)- STEP 2: RAISE문을 사용하여 직접적으로 예외를 발생시킨다. (실행절)- STEP 3: 예외가 발생할 경우 해당 예외를 참조한다. (예외절) ex) step 1: 예외의 이름을 선언 sync_exec_day Exception;V_SYNC_DAY VARCHAR2(4) := TO_CHAR(SYSDATE,'YD'); ex) step 2: RAISE 문을 사용하여 직접적으로 예외를 발생시킨다. IF V_SYNC_DAY IN ('목','일') THENRAISE sync_exec_d..
1. ggusr 계정에 PR_EMP_TEST (프로시저)를 실행할 수 있는 권한을 부여하고 ggusr 세션에서 수행해보아라. 1) 권한 부여하기 GRANT EXECUTE ON PR_EMP_TEST TO ggusr2) SQL > connect ggusr/123123; SQL > EXEC PR_EMP_TEST; 2. AUTHID CURRENT USER1) 더 엄격한 권한 관리가 가능하다. 2) 프로시저를 실행할 수 있는 권한을 부여하더라도 TB_LS_EMP867 테이블을 조회할 수 있는 권한이 같이 부여되는 것은 아니다. 즉,,SQL > EXEC PR_EMP_TEST; ( 수행 O )SQL > SELECT * FROM TB_LS-EMP867; ( 수행 X ) ※ autonomous : 자율적인※ PRAGMA..
참조: www.grubee.net/lecture/1075 패키지(Package)는 오라클 데이터베이스에 저장되어 있는 서로 관련있는 PL/SQL 프로시저와 함수들의 집합이다.패키지는 선언부와 본문 두 부분으로 나누어 진다. 1. 패키지 선언절 문법 선언부CREATE [ OR REPLACE ] PACKAGE 패키지명 IS | AS [ 변수 선언절 ][ 커서 선언절 ][ 예외 선언절 ][ Procedure 선언절 ][ Function 선언절 ]END 패키지명 - 선언절은 패키지에 포함될 PL/SQL 프로시저, 함수, 커서, 변수, 예약절을 선언한다. - 패키지 선언부에서 선언한 모든 요소들은 패키지 전체에 적용된다. - 즉, 선언부에서 선언한 변수는 PUBLIC 변수로 사용된다. 2. 패키지 본문 문법 본문..
create or replace PROCEDURE PR_POPULAR_MOVE_INTO_RCMD (P_USER_NO NUMBER) IS CURSOR RCMD_CURSOR IS SELECT Y.RO, SUBSTR(Y.CRS_SESS_ID,1,7) CRS_ID, Y.CRS_SESS_ID, Y.WR_DTM FROM( SELECT ROWNUM RO, X.* FROM ( SELECT * FROM TB_ST_CRS_STTS_DAY WHERE RCMD_KIND_CD = '2' AND WR_PER_NO = P_USER_NO ORDER BY RCMD_DT, SORT_OR )X )Y WHERE Y.RO
-- 1. RANK 함수 알아보기 -- 2. REF CURSOR (DECLARE 절에서 선언 X, BEGIN 절에서 선언하는 CURSOR ) -- 동적 SQL 에서 커서를 사용하기 위한 CURSOR ( 중요★☆ ) -- 1) 커서를 사용하려면 아래와 같은 절차가 진행된다. ★ -- CURSOR 선언 >> CURSOR OPEN >> CURSOR에 있는 내용 FETCH >> CURSOR CLOSE -- 2) 아래의 예와 같이 선언하면 쿼리의 결과가 ○ 메모리 ○ 에 적재된다. ★-- ex) CURSOR EMP_CURSOR IS -- SELECT EMP_NO, EMP_ID-- FROM TB_LS_EMP867; -- 3) 우리가 알고있는 커서 선언은 DECLARE 절 OR(IS..) 에서 수행하는데,-- REF..
1. 동적 SQL-- 1) PL/SQL 을 실행할 때마다 SQL이 동적으로 변경된다는 의미-- 2) 프로시저 생성할 때 SELECT문의 INTO절 없이 사용 가능해진다. -- 3) 프로시저 생성 시, DDL문이나 DCL문을 포함시킬 수 있다.-- ( DDL : CREATE, ALTER, DROP, TRUNCATE, RENAME )-- ( DCL : GRANT, REVOKE ) 2. 동적 SQL을 사용하는 방법 2가지-- 1) EXECUTE IMMEDIATE 절 사용하는 방법 (가장 많이 활용)- INTO절 없는 SELECT 문장- DDL 문을 PL/SQL에서 수행- DML 문을 PL/SQL에서 수행- ANONYMOUS PL/SQL을 수행 -- 2) DBMS_SQL 패키지를 이용하는 방법 예제 1-1. 부..