라벨이 Oracle인 게시물 표시

[Oracle] 오라클 PL/SQL

PL/SQL이란 Procedural Language PROCEDURE, FUNCTION, PACKAGE , TRIGGER를 제작할 때 사용하는 언어이다. PROCEDURE : 리턴형이 없는 함수 리턴형이 없다는 특징이 자바스크립트 언어와 같음 캐시 메모리에 저장되어 속도가 빠르다. 트랜젝션 제어할 때 사용된다. FUNCTION : 리턴형이 있는 함수 함수 : 독립(C언어) 메소드 : 클래스 종속 PACKAGE : 관련된 PROCEDURE , FUNCTION 을 모아서 둔 곳 TRIGGER : 이미 지정된 이벤트 발생시에 자동 처리 사용자 정의 언어이다. 반복구간이 많을 때 재사용하여 코드를 단축하기 위함이 목적이다. 코드를 통해 PL/SQL 내용이 드러나지 않기 때문에 정보 보안에 유리하다. PL/SQL BLOCK 기본 구성 형식 DECLARE -- 선언부(변수선언) BEGIN -- 구현부 -- 예외처리 (생략 가능) END; / 사용시 유의사항 SELECT에서 실행된 결과값을 받을 때, INTO를 사용한다. 변수에 값 설정 할 때,  := 를 사용한다. PL/SQL에서 변수의 의미와 사용법 변수 지역변수 매개변수 : SUBSTR(‘‘,1,2) MAX(컬럼명) 변수 사용법 스칼라변수  : 단순 변수(NUMBER,VARCHAR2,CLOB,DATE) id VARCHAR2(10) SET SERVEROUTPUT ON; DECLARE vempno NUMBER(4); vename VARCHAR2(20); vjob VARCHAR2(20); vhiredate DATE; vsal NUMBER(7,2); BEGIN SELECT empno,ename,job,hiredate,sal INTO vempno,vename,vjob,vhiredate,vsal FROM emp WHERE empno=7788; -- 출력 DBMS_OUTPUT.PUT_LINE('======결과======'); DBMS_O

[Oracle] 오라클 SubQuery(서브쿼리)

서브쿼리 Sub Query가 생겨난 이유 여러 쿼리문장을 합쳐서 한 번에 사용할 수 있게 하기 위해서이다. 속도가 빠르다는 장점이 있다. 여러 쿼리 문장을 따로 실행하면 연결/해제를 반복(서버에 왔다갔다)해야 하기 때문에 성능이 저하될 수밖에 없다. Sub Query의 종류 단일행 출력 결과가 하나인 것 WHERE sal = (SELECT AVG(sal) ~~ ) 다중행 출력 결과가 여러개인 것 deptno IN (SELECT deptno FROM dept) 다중컬럼 스칼라 서브쿼리 실무에서 가장 많이 사용됨 컬럼 대신 사용될 수 있다. SELECT no, (SELECT ~) … JOIN을 걸지 않아도 되어서 편리하다. 단일행 서브쿼리 서브쿼리의 결과값이 여러 행이 아니라 단 하나의 행인 경우를 말한다. 단일행 서브쿼리의 연산자 : 비교연산자(= , !=(<>) , <= , >= , < , >) 형식 -- 메인쿼리 SELECT * FROM emp -- 서브쿼리 WHERE deptno=(SELECT ~) 예) emp테이블 : 사원의 평균 급여 = 평균보다 적게 받는 사원 정보를 출력 SELECT * FROM emp WHERE sal<(SELECT AVG(sal) FROM emp); 예) SCOTT이 근무하는 부서에 같이 근무하는 사원의 모든 정보를 출력 SELECT * FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='SCOTT'); 예) GROUP BY를 사용한 서브쿼리 : 사원의 평균 급여보다 높은 부서의 부서번호, 인원수를 출력하기 SELECT deptno,COUNT(*) FROM emp GROUP BY deptno HAVING AVG(sal)<(SELECT AVG(sal) FROM emp); 다중행 서브쿼리 서브쿼리 데이터 결과가 여러개인 방법이다. 다중행 서브쿼리는 서브쿼리의 결과가 여러 건 출력되기 때문에 단일행 연산자를 사용할 수 없다.