SELECT 구조
SELECT
select_list
INTO
variable_list
FROM
table_name
WHERE
condition;
WHERE과 같이 INNER JOIN, GROUP BY, HAVING, UNION을 사용할 수 있다.
예전에 작성한 EXAMPLE 데이터베이스로 예제를 실행해보자.
DECLARE
v_customer_name customers.name%TYPE;
BEGIN
SELECT
name
INTO
v_customer_name
FROM
customers
WHERE
customer_id = 100;
DBMS_OUTPUT.PUT_LINE( v_customer_name );
END;
익명 블록이 완료되었습니다.
Verizon
1. v_customer_name 은 customers.name의 type으로 정의해준다.
2. customer_id = 100 인 애를 뽑아준다
3. 이를 출력해준다.
맞는지 의심하며 확인해본다.
SELECT name
FROM customers
WHERE customer_id = 100;
Verizon
column 단위가 아닌 row 단위로 뽑아본다.
DECLARE
l_customer customers%ROWTYPE;
BEGIN
SELECT
*
INTO
l_customer
FROM
customers
WHERE
customer_id = 100;
DBMS_OUTPUT.PUT_LINE( l_customer.name || ', website: ' ||
l_customer.website );
END;
익명 블록이 완료되었습니다.
Verizon, website: http://www.verizon.com
일반적인 SELECT문으로 뽑아내면 이런 모양이다.
하지만 PL/SQL은 보고 싶은 부분만 output으로 출력할 수 있기 때문에 저러한 결과가 나타나는 것이다.
서로 다른 column에서 뽑아본다.
DECLARE
v_customer_name customers.name%TYPE;
v_contact_first_name contacts.first_name%TYPE;
v_contact_last_name contacts.last_name%TYPE;
BEGIN
SELECT
name, first_name, last_name
INTO
v_customer_name, v_contact_first_name, v_contact_last_name
FROM
customers
INNER JOIN contacts USING( customer_id )
WHERE
customer_id = 100;
DBMS_OUTPUT.PUT_LINE( v_customer_name || ', Contact Person: ' ||
v_contact_first_name || ' ' || v_contact_last_name );
END;
익명 블록이 완료되었습니다.
Verizon, Contact Person: Elisha Lloyd
DECLARE 부분에서 보다시피 customers와 contacts 테이블에서 SELECT 해오는 것을 알 수 있다. 이후 INNER JOIN 해준다.
한 번 살펴보자.
SELECT customers.name, contacts.first_name, contacts.last_name
FROM customers
INNER JOIN contacts ON customers.CUSTOMER_ID = contacts.CONTACT_ID
WHERE customers.CUSTOMER_ID = 100;
그냥 INNER JOIN 해준다면 이런 쿼리가 될 것이다. 결과는 테이블 형식으로 나온다.
하지만 PL/SQL을 사용하면 원하는 형식으로 출력할 수 있다.
ORA-00947: not enough values The INTO list contains fewer variables than the SELECT list.
ORA-00913: too many values The INTO list contains more variables than the SELECT list.
ORA-06502: PL/SQL: numeric or value error
rkwudhsms value가 적합하지 않으면 error가 난다. 가져오는 value의 개수가 적합해도 자료형이 맞지 않으면 error가 난다.
'Database > PL SQL' 카테고리의 다른 글
PL/SQL Tutorial - Cursor FOR LOOP (0) | 2019.05.08 |
---|---|
PL/SQL Tutorial - Cursor (0) | 2019.05.08 |
PL/SQL Tutorial - Exception handlers (0) | 2019.05.08 |
PL/SQL Tutorial - CONTINUE (0) | 2019.05.08 |
PL/SQL Tutorial - LOOP (0) | 2019.05.08 |