본문 바로가기

오라클

상관하위부 질의 상관하위부 질의 상호연관 서브쿼리는 서브쿼리가 메인쿼리의 값을 이용하고, 그렇게 구해진 서브쿼리의 값을 다시 메인쿼리가 이용. 서브쿼리 단독 실행 불가. 성능이 좋지 않음 사용할 일 많지 않음. SELECT name, basicpay, (SELECT COUNT(i2.basicpay)+1 FROM insa i2 WHERE i2.basicpay > i1.basicpay) 순위 FROM insa i1; 더보기
프로시져의 SYS_REFCURSOR 예제 select_Insa 프로시져 CREATE OR REPLACE PROCEDURE select_Insa ( pResult OUT SYS_REFCURSOR -- 파라미터가 OUT이라 해당값을 불러온 놈에게 돌려준다 => list_Insa 프로시져의 실행문 select_Insa(vResult,pcity); ,pcity IN insa.city%TYPE ) IS BEGIN OPEN pResult FOR SELECT name, city FROM insa WHERE city=pcity; END; / list_Insa 프로시져 CREATE OR REPLACE PROCEDURE list_Insa ( -- 실행자에 의해서 받아올 인수( 파라미터가 IN이면 해당 프로시져안에서 소화한다, OUT이면 불러온 실행문에 값을 돌려.. 더보기
프로시져(Stored Procedure) -- 프로시져(Stored Procedure) PL/SQL에서 가장 대표적인 구조인 스토어드 프로시져는 개발자가 자주 실행해야 하는 업무 흐름을 미리 작성하여 데이터베이스 내에 저장해 두었다가 필요할 때마다 호출하여 실행할 수 있다. -- 프로시져 작성CREATE [OR REPLACE] PROCEDURE 프로시져이름[( 매개변수 IN 자료형, // 입력용, 인수에서는 자료형크기를 지정하면 안 된다. 매개변수 OUT 자료형, // 출력용 매개변수 IN OUT 자료형 // 입/출력용)]IS [변수의 선언]BEGIN ............. [EXCEPTION] .............END; IN 파라미터 : 호출자에 의해 프로시져로 전달되는 파라미터이며, '읽기' 전용의 값으로 프로시져는 이 파라미터의 값.. 더보기
PL/SQL -- PLSQL PL/SQL(Procedural Language extensions to SQL)은 프로그래밍언어의 특성을 가지는 SQL의 확장이며, 데이터 조작과 질의 문장은 PL/SQL의 절차적 코드 안에 포함된다. 또한 PL/SQL을 사용하면 SQL로 할 수 없는 절차적 작업이 가능하다. 여기에서 절차적이란 어떤 것이 어떻게 완료되는지 그 방법을 정확하게 코드에 기술 한다는 것을 의미한다. -- SQL Developer 에서 PL/SQL의 쿼리의 결과를 확인할 수 있게 설정하기 * DBMS_OUTPUT.PUT_LINE()을 이용하여 결과를 출력하기 위해서는 먼저 SET SERVEROUTPUT ON 를 실행 * Developer에서 메뉴 : 보기 - DBMS 출력 선택후 DBMS 출력 창의 에서 + .. 더보기
트랜잭션 -- 트랜잭션 트랜잭션(transaction)은 하나의 논리적 작업 단위로 수행되는 일련의 작업으로 테이블에 INSERT, UPDATE, DELETE 문으로 지시하고, COMMIT을 실행하면 모든 변경 사항이 영구히 데이터베이스에 저장되며, ROLLBACK은 마지막 COMMIT이나 ROLLBACK 이후의 변경사항을 취소하고 데이터베이스를 원래의 상태로 되돌려준다. 즉, 트랜잭션에서 데이터베이스를 변경하라는 명령이 COMMIT이고, COMMIT전까지 변경된 것을 되돌리는 것이 ROLLBACK이다. --COMMIT --ROLLBACK --SAVEPOINT -- transaction 내의 한 시점을 표시한다. -- ROLLBACK TO SAVEPOINT 명령어로 표시 지점까지 ROLLBACK하는데 쓰인다. ;.. 더보기
inline view (또는 subquery), WITH -- inline view (또는 subquery) -- inline view 는 SELECT, INSERT, UPDATE, DELETE 문이나 다른 하위 쿼리 내부에 출력된 SELECT 문 -- inline view 식이 허용 되는 모든 위치에서 사용할 수 있으며 단독으로 실행 가능하다. -- 판매된 책코드, 책이름 SELECT b_id, title FROM book WHERE b_id IN (SELECT b_id FROM panmai); -- WHERE절에서 잘못 사용된 예 SELECT 컬럼1,컬럼2 FROM 테이블1 WHERE 컬럼1=(SELECT 컬럼1, 컬럼2 FROM 테이블2); -- WHERE 절에 사용한 경우 괄호안의 SELECT문의 컬럼은 하나만 가능 SELECT 컬럼1,컬럼2 FROM .. 더보기
SELF JOIN -- SELF JOIN : 자신의 테이블을 별명을 사용하여 마치 두개의 테이블인것 처럼 조인(자기 자신을 조인) SELECT A1.B_ID, A1.NAME, a2.name FROM au_book a1 JOIN au_book a2 ON a1.b_id=a2.b_id ORDER BY a1.b_id; SELECT A1.B_ID, A1.NAME, a2.name FROM au_book a1 JOIN au_book a2 ON a1.b_id=a2.b_id AND a1.name> a2.name -- ON 뒤에는 조건이 온다. ORDER BY a1.b_id; --=> 위 아래의 차이는 저자가 2명이상인 것만 출력 더보기
CROSS JOIN -- CROSS JOIN : 학술적인 의미. 카디션 곱 SELECT * FROM book; -- 9개 행의 데이터 SELECT * FROM danga; -- 9개 행의 데이터 SELECT b.b_id, title, price FROM book b CROSS JOIN danga d; -- 총 81개 행의 데이터 더보기