본문 바로가기

DB/Oracle

(53)
[Oracle] 사용자 정의 함수(Stored Function) 구문 CREATE OR REPLACE FUNCTION 함수이름 RETURN 데이터타입 IS BEGIN RETURN (값); END; EX) 입력받은 갑으로부터 10%의 세율을 얻는 함수 TAX() CREATE OR REPLACE FUNCTION tax (p_value IN NUMBER) RETURN NUMBER IS BEGIN RETURN (p_value * 0.1); END; ----------------------------------------------------------------------------------------------------------------------------------------------------------------- #사실 DB툴에서 함수정보를 확인하는게 더..
[Oracle] EXCEPTION(예외처리) 예제 요구사항 : 사원 번호와 급여 인상/인하율을 입력받아 현재 급여와 비교하며 결과 도출 그러나 인상된 금액은 해당 직무의 최소, 최대 급여의 범위를 넘지못함. 또한 입력받은 사원 번호가 존재하지 않는다면 예외처리 Step 1. 예외 처리 없이 수행되도록 만들기 CREATE OR REPLACE PROCEDURE chk_salary (p_id employees.employee_id%TYPE, p_num NUMBER) IS l_name employees.last_name%TYPE; before_salary employees.salary%TYPE; after_salary employees.salary%TYPE; BEGIN SELECT last_name, salary INTO l_name, before_salary..
[Oracle] ORA-06550 & EXCEPTION(예외처리) ORA-06550: 호출 시 인수의 수나 유형이 잘못되었습니다. 오라클은 SP(Storde Procedure) 실행 시 인수(Parameter Variable 수)와 유형(Parameter Variable 데이터 타입)을 확인합니다. ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Exception(예외처리) 구문 DECLARE -- 예외 선언 -- 예외 이름 EXCEPTION; BEGIN -- 예외 발생 -- RAISE 예외 이름; EXCEPTION -- 예외 처리..
[Oracle] 커서(Cursor) 예제들 예제 1 요구사항: 부서 이름을 입력하여 해당 부서에 속한 사원의 정보(사원 아이디, 사원 이름)를 얻습니다. 부서 이름을 입력할 떄 대소문자의 구분이 필요하지 않습니다. EXEC emp_info('it') SET SERVEROUTPUT ON CREATE OR REPLACE PROCEDURE emp_info ( p_dept departments.department_name%TYPE) IS CURSOR emp_cur IS SELECT employee_id, last_name FROM employees e JOIN departments d ON d.department_id = e.department_id WHERE department_name LIKE UPPER(p_dept); l_emp_id employe..
[Oracle] 커서(Cursor) SET SERVEROUTPUT ON CREATE OR REPLACE PROCEDURE info_Hiredate (p_year IN CHAR := 0) IS l_emp employees%ROWTYPE; BEGIN SELECT employee_id, last_name, salary INTO l_emp.employee_id, l_emp.last_name, l_emp.salary FROM employees WHERE TO_CHAR(hire_date, 'YYYY') = p_year; DBMS_OUTPUT.PUT_LINE(l_emp.employee_id || '' || l_emp.last_name || '' || l_emp.salary); END ; EXEC info_Hiredate('1994') ORA-01422..
[Oracle] 테이블 생성 & 테이블,컬럼 Comment & 테이블 기본키 추가 & ORA-02437 & 테이블 컬럼타입 변경 테이블 생성 CREATE TABLE 테이블명 ( 컬럼명 컬럼타입(바이트크기) 조건 EXAMPLE1 VARCHAR2(4) NOT NULL, EXAMPLE2 CHAR(10) DEFAULT '연습' NOT NULL, EXAMPLE3 NUMBER(1) DEFAULT '0', EXAMPLE4 DATE DEFAULT SYSDATE NOT NULL ); 테이블 삭제 DROP TABLE 테이블명 테이블 컬럼타입 변경 구문 ALTER TABLE 테이블명 modify 컬럼명 데이터 타입 EX) ALTER TABLE SYSACCESSPRG_HISTORY modify CHANGEMD DATE ---------------------------------------------------------------------------..
[Oracle] 조건문 IF, 제어문 LOOP, 제어문 FOR CASE WHEN max_salary - min_salary < 5000 THEN 'low" WHEN max_salary - min_salary < 10000 THEN 'middle' ELSE 'high' END CASE; PL/SQL에서는 실행문에서 조건문(IF)를 사용할 수 있다. IF문 문법 IF 조건이 참이면 THEN 구문1 ; ELSIF 조건이 참이면 THEN 구문2 ; ELSE 규뮨3 ; END IF; EX) 와 같은 뜻 IF max_salary - min_salary < 5000 THEN 'low'; ELSIF max_salary - min_salarY < 10000 THEN 'middle'; ELSE 'high'; END IF; ----------------------------------..
[Oracle] REGEXP_SUBSTR =CASE WHEN END + SUBSTR + INSTR 요구사항: 수량과 가격 한번에 표시 ,품목코드 앞자리수 4개별로 데이터 합치기 , 아이템 타입 수량 * 기존수량 ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 기존쿼리 SELECT ITEM_CODE ,ITEM_HNAME ,ITEM_TYPE ,SUM(DECODE(SUBSTR(DELIV_DATE, 5, 2), '01', DECODE(:as_flag1, '1', TAX_QTY + ADD_QTY, AMOUNT), 0)) AS DSP01 ,SUM(DECODE(SUBSTR(D..