19. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
JDBC/OCDK ์ค์ โ unix client
dscp ์ ํธ๋ฆฌํฐ๋ฅผ ์ด์ฉ
% $SYBASE/OCS-12_5/bin/dscp
>> open
OK
FailOver to Interface Driver
Session 1 InterfacesDriver>> add asiqdemo // IQ engine name
Service : [SQL Server] // enter
Transport Type : [tcp] tli tcp // sun์ ์ ์ธํ๋ฉด tcp
Transport Address : 157.133.75.36 2345 // IP, port
Transport Type : [tcp] // enter
Transport Address : // enter
Security Mechanism [ ] : // enter
HA Failoverserver : [ HA Failover Server ] // enter
Error in adding asiqdemo
Session 1 InterfacesDriver>> exit
54. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
๋ณ์์ ๊ฐ ํ ๋นํ๊ธฐ
SET๋ฌธ์ ํตํด์
CREATE PROCEDURE greater_proc ( IN v_a INT, IN v_b INT, OUT v_c INT )
BEGIN
IF v_a > v_b THEN
SET v_c = v_a;
ELSE
SET v_c = v_b;
END IF;
END
single row SELECT๋ฌธ์ ํตํด์
BEGIN
DECLARE v_customer_id INT;
DECLARE v_orders INT;
SELECT COUNT(b.id) INTO v_orders
FROM customer a, sales_order b
WHERE a.id = b.id
AND a.id = v_customer_id;
END
// ๋ง์ฝ select ํ ๊ฒฐ๊ณผ๊ฐ 2๊ฑด ์ด์์ด๋ฉด ์ค๋ฅ ๋ฐ์
58. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
์ฐธ๊ณ
DECLARE LOCAL TEMPORARY TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL,
fname CHAR(30) NOT NULL,
salary UNSIGNED INT NOT NULL,
dept_id INT NOT NULL
) IN SYSTEM
์์ ํ ์ด๋ธ์ SYBASE IQ Temporary Store ์์ญ์ ์์ฑ๋์ง ์๊ณ ASA์ ์์๊ณต๊ฐ์ธ
/tmp/.SQLAnywhere/์ ํ๋ฐ์ฑ ํ์ผ๋ก ์์ฑ๋๋ฉฐ 2GB์ ํ์ผํฌ๊ธฐ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋
๋ค. ์ด ํ๊ณ ๊ฐ์ ๋๋ฌํ๋ฉด IQ Server๊ฐdown๋๊ฑฐ๋ hang ์ํ๊ฐ ๋๋๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ถ์
์ฉ์ด ๋ง์ต๋๋ค.IQ์์ ASA๋ ๋จ์ํ Catalog๋ฅผ ์ํ ๊ณต๊ฐ์ด๋ฏ๋ก ์ฌ์ฉ์๋ค์ ์ฌ์ฉ์ ๊ธ
ํ์ฌ ์ฃผ์ญ์์ค.
local temporary table vs. global temporary table
ETL ์์ ์์ CDC ๋ฐ์ดํฐ๋ฅผ ๋ณธ ํ ์ด๋ธ์ ๋ฐ์ํ๊ธฐ ์ ์ ๋ก๋ฉํ๊ธฐ ์ํ ์์ ํ ์ด๋ธ ํํ
์ ๊ฐ์ด ์ฌ์ฉ๋น๋๊ฐ ๋ง์ ๊ฒฝ์ฐ๋ global temporary table์ ์ฌ์ฉํ๋ ํธ์ด ์๋ฒ์๊ฒ ํ ์ด
๋ธ์ ๋งค๋ฒ ๋ง๋๋ ๋ถ๋ด์ ์ค์ฌ์ค ์ ์์ต๋๋ค.
59. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
if
๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ์ ์ฌํ๊ฒ ์ผ์นํ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์์ ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ง์ฝ ์กฐ๊ฑด์ด TRUE ์ด๋ฉด THEN ~ ELSE ์ฌ์ด์ ๋ฌธ์ฅ์ ์ํํ๊ณ FALSE, NULL ์ด๋ฉด
ELSE ~ END IF ์ฌ์ด์ ๋ฌธ์ฅ์ ์ํํฉ๋๋ค.
๋ ผ๋ฆฌ์ ์ผ๋ก ์ดํดํ๊ธฐ ํธํ๊ฒ ํ๊ธฐ์ํด IF ~ ELSE๋ฌธ์ ์ค์ฒฉํด์ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ IF ~
ELSEIF ~ ELSE๋ CASE ๋ฌธ์ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
๋ฌธ์ฅ ๊ตฌํ์ ELSEIF ๋ฌธ์ ์คํ ๋ง๊ณผ ์ข ๋ฃ์์ END IF์ ์ฌ์ฉ์ ์ฃผ์ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์กฐ๊ฑด์ ์์ NULL ๊ฐ์ ๋ํ ๋น๊ต๋ IS NULL ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
syntax
IF search-condition THEN
statement-list;
[ ELSEIF search-condition THEN
statement-list; ]
[ ELSE
statement-list; ]
END IF;
60. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
case(1)
์ค์ฒฉ๋ IF๋ฌธ ์ฒ๋ผ ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ถ๊ธฐํด์ผ ํ๋ค๋ฉด ์ด ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ๊ฐ CASE ์
๋๋ค. ์ด๋ฅผ CASE statement๋ผ๊ณ ํฉ๋๋ค.
๋ฌธ์ฅ๊ตฌํ ์ข ๋ฃ์์ END CASE์ ์ฌ์ฉ์ ์ฃผ์ ํ์๊ธฐ ๋ฐ๋๋๋ค.
syntax
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list;
[ WHEN [ constant | NULL ] THEN statement-list; ]
ELSE statement-list;
END CASE;
์)
BEGIN
DECLARE prod_name CHAR(20);
DECLARE type CHAR(10);
SELECT name INTO prod_name FROM product
WHERE id = 10;
CASE prod_name
WHEN โTee Shirtโ THEN SET type = โSHIRTโ
ELSE SET type = โUnknownโ
END CASE;
END
61. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
case(2)
SELECT์ ์ ํน์ ์ปฌ๋ผ์ ๋์ ํ ์ ์๋ ๋ค๋ฅธ ์ ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ์ปฌ๋ผ์ ๋ถ๊ธฐ์กฐ๊ฑด
์ด ๋ํ๋ ๋ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ์ ๋๋ค. ์ด๋ฅผ CASE expression ์ด๋ผ๊ณ ํฉ๋๋ค.
SYBASE IQ์ WatcomSQL์์๋ SELECT ์ ์ IF๋ฌธ์ ์ฌ์ฉํ ์ ์๊ณ ์ปค์์ ์ฌ์ฉ ๋น
๋๋ฅผ ์ค์ด๊ธฐ ์ํด CASE ํํ์์ ์ฌ์ฉ์ ๊ถ์ฅํ๋ฉฐ ์ข ๋ฃ์์ END์ ์ฌ์ฉ์ ์ฃผ์ ํ์๊ธฐ
๋ฐ๋๋๋ค.
syntax
CASE expression
WHEN expression THEN expression
[ ELSE expression ]
END
์)
SELECT id, SELECT name,
( case name ( case
when โTee Shirtโ then โShirtโ when id=โ1โ then โShirtโ
when โSweatshirtโ then โShirtโ when id=โ2โ then โShirtโ
when โBaseball capโ then โHatโ when id=โ3โ then โHatโ
else โUnknownโ else โUnknownโ
end ) as Type end ) as Type
FROM product; FROM product;
62. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
loop
๊ฐ์ฅ ๊ฐ๋จํ ๋ฃจํ๋ก LOOP ~ END LOOP ์ฌ์ด์ ๋ฐ๋ณต๋๋ ๋ฌธ์ฅ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ํ
์ถ์กฐ๊ฑด์ ์ ์ํ์ง ์์ผ๋ฉด ๋ฌดํ๋ฃจํ๊ฐ ๋์ด ์์คํ ์ ๋ง์ ๋ถํ๋ฅผ ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ํน
์ ํ ์กฐ๊ฑด์ ์ฃผ๊ณ LEAVE ๋ฌธ์ ํตํด ๋ฃจํ๋ฅผ ํ์ถํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
syntax
[ statement-label : ]
LOOP
statement-list;
END LOOP [ statement-label ]
์)
โฆโฆโฆ
SET i = 1;
insert_loop:
LOOP
INSERT INTO counter (number) VALUES (i);
IF i >= 10 THEN
LEAVE insert_loop;
END IF;
SET i = i + 1;
END LOOP insert_loop
// ์ ์๋ ์ค์ง LOOP๋ฌธ์ ์ํ ์๋ก ์ค์ ์ด๋ฐ ์ ๋ ฅ๋ฌธ์ ์ฌ์ฉ์ ์์ ๋ฐ๋๋๋ค.
63. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
while loop
์กฐ๊ฑด์ด TRUE ์ธ ๋์๋ง ์ผ๋ จ์ ๋ฌธ์ฅ์ ๋ฐ๋ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ฉฐ ์กฐ๊ฑด์ ๋ฐ๋ณต์ด ์์๋ ๋
์ฒดํฌํ๊ฒ ๋์ด ๋ฃจํ๋ด์ ๋ฌธ์ฅ์ด ํ๋ฒ๋ ์ํ๋์ง ์์ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๋ฃจํ๋ฅผ ์์ํ ๋ ์กฐ๊ฑด์ด FALSE ์ด๋ฉด ๋ฃจํ๋ฅผ ํ์ถํ๊ฒ ๋ฉ๋๋ค.
syntax
[ statement-label : ]
WHILE search-condition LOOP
statement-list;
END LOOP [ statement-label ]
์)
SET i = 1;
insert_loop:
WHILE i <= 10 LOOP
INSERT INTO counter (number) VALUES (i);
SET i = i + 1;
END LOOP insert_loop
// ์ ์๋ ์ค์ง WHILE LOOP๋ฌธ์ ์ํ ์๋ก ์ค์ ์ด๋ฐ ์ ๋ ฅ๋ฌธ์ ์ฌ์ฉ์ ์์ ๋ฐ๋๋๋ค.
64. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
cursor for loop
์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ index counter๋ฅผ ์ฆ๊ฐ์์ผ ๊ฐ๋ฉฐ ํน์ ๋ฌธ์ฅ์ ๋ฐ๋ณตํ๋ FOR
LOOP์ ๋ค๋ฅด๋ฉฐ ์ค์ง ์ปค์์ ํจ๊ป ์ฌ์ฉํ์ฌ FETCH ๋ก์ง์ ์ปค์์ ๋ง์ง๋ง ๋ฐ์ดํฐ๊น์ง
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋์ผ๋ก ์ปค์๊ฐ close ๋๋ ๋ฑ ํธ๋ฆฌํ ๋ฉด์ด ์์ต๋๋ค.
BEGIN ~ END ์ฌ์ด์ compound statement ๋ด ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
syntax
FOR for-loop-name AS cursor-name
CURSOR FOR statement
DO
statement-list;
END FOR
์)
CREATE VARIABLE v_emp_name CHAR(30);
FOR names AS curs
CURSOR FOR SELECT emp_name
FROM employee
DO
SET v_emp_name = emp_name;
CALL search_for_name_proc ( v_emp_name );
END FOR;
67. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
cursor
์)
CREATE PROCEDURE cur_proc()
BEGIN
DECLARE err_not_found EXCEPTION FOR SQLSTATE โ02000โ;
DECLARE reg CHAR(20);
DECLARE cyear CHAR(4);
DECLARE sqty DECIMAL(12);
DECLARE test_cur CURSOR FOR
SELECT cust_reg, order_year, sum(order_qty)
FROM customer a, order_detail b
WHERE a.cust_id = b.cust_id
GROUP BY cust_reg, order_year
FOR READ ONLY;
OPEN test_cur;
curloop:
LOOP
FETCH test_cur INTO reg, cyear, sqty;
IF SQLSTATE = err_not_found
LEAVE curloop;
END IF;
END LOOP curloop;
CLOSE test_cur;
END
74. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
exception
์)
BEGIN
DECLARE column_not_found
EXCEPTION FOR SQLSTATE โ52003โ; // ์์ธ์ ์ธ
MESSAGE โHello !!!โ TO CLIENT;
SIGNAL column_not_found; // ์์ธ๋ฐ์
MESSAGE โLine following signal !!!โ TO CLIENT; // ์ํ์๋จ
EXCEPTION // ์์ธ์ฒ๋ฆฌ
WHEN column_not_found THEN // 52003 ์์ธ์ด๋ฉด
MESSAGE โ52003 handling. (SQLSTATE = โ,
SQLSTATE, โ)โ TO CLIENT;
WHEN others THEN // ๊ทธ ์ธ ์์ธ์ด๋ฉด
MESSAGE โOthers handling. (SQLSTATE = โ,
SQLSTATE, โ)โ TO CLIENT;
END
75. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
exception
์ฌ์ฉ์๊ฐ ์์์ ์์ธ(SQLSTATE) ๊ฒฝ์ฐ๋ฅผ ๋ง๋ค์ด ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ ์ด ๋ ์ฃผ
์ ํ ์ ์ ์ ์ธ ๊ฐ๋ฅํ SQLSTATE ๋ฒํธ๋ 99000 ~ 99999 ์ด๋ผ๋ ์ฌ์ค์ ๋๋ค. ๊ทธ ์ธ์
๋ฒํธ๋ ์์คํ ์ด ์์ฝํ ๋ฒํธ๋ค์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์)
BEGIN
DECLARE my_exception
EXCEPTION FOR SQLSTATE โ99000โ; // ์ฌ์ฉ์ ์ ์ ์์ธ์ ์ธ
MESSAGE โUser-Defind Exception test !!!โ TO CLIENT;
// ์ฌ๊ธฐ์ ์ฌ์ฉ์ ์ ์ ์์ธ๋ฅผ ๋ง๋๋ ์กฐ๊ฑด์ ์ ์ ๋ ฅ
SIGNAL my_exception; // ์ฌ์ฉ์ ์ ์ ์์ธ๋ฐ์
MESSAGE โLine following signal !!!โ TO CLIENT; // ์ํ์๋จ
EXCEPTION // ์์ธ์ฒ๋ฆฌ
WHEN my_exception THEN // ์ฌ์ฉ์ ์ ์ ์์ธ์ด๋ฉด
MESSAGE โmy_exception handling. (SQLSTATE = โ,
SQLSTATE, โ)โ TO CLIENT;
WHEN others THEN // ๊ทธ ์ธ ์์ธ์ด๋ฉด
MESSAGE โOthers handling. (SQLSTATE = โ,
SQLSTATE, โ)โ TO CLIENT;
END
85. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
where ์
where์ ์๋ SELECT ํ๋ ๋ก์ฐ๋ฅผ ์ ํํ๊ธฐ ์ํ search condition์ด ํฌํจ๋ ์ ์์ผ๋ฉฐ
qualification ํน์ predicate๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์กฐ๊ฑด์ ์ด ์ฌ์ฉ๋ฉ๋๋ค
Comparison operator : =, > , <, <=, >=, !=, !>, !<
SELECT emp_lname
FROM employee
WHERE salary > 50000
Range operator : BETWEEN, NOT BETWEEN
SELECT emp_lname
FROM employee
WHERE salary BETWEEN 40000 AND 50000
List operator : IN, NOT IN
SELECT company_name, state
FROM customer
WHERE state IN (โONโ, โPQโ, โMBโ)
86. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
where ์
Character match : LIKE, NOT LIKE
SELECT company_name, phone
FROM customer
WHERE phone LIKE โ415%โ
Unknown value : IS NULL, IS NOT NULL
SELECT dept_name
FROM department
WHERE dept_head_id is NOT NULL
Combination : AND, OR, NOT
SELECT emp_fname, emp_lname
FROM employee
WHERE saraly > 50000
AND emp_fname like โA%โ
94. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
๋ถ์ํ ํจ์
์ฐธ๊ณ : PARTITION BY ๊ธฐ๋ฅ ๊ตฌํ ํ๊ธฐ
SELECT district, grade, AVG(math_score),
rank() over (partition by district order by avg(math_score) desc) as rank_d
FROM math_report
GROUP BY district, grade
ORDER BY district;
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'essex'
GROUP BY district, grade
UNION ALL
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'middlesex'
GROUP BY district, grade
UNION ALL
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'suffolk'
GROUP BY district, grade
ORDER BY 1,2;
95. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
Retrieving data from several tables
96. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
overview
syntax
SELECT select-list // select ์
[ FROM table-expression ] // from ์
[ ON join-condition ] // on ์
[ WHERE search-condition ] // where ์
[ GROUP BY column-list ] // group by ์
[ HAVING search-condition ] // having ์
[ ORDER BY column-list ] // order by ์
FROM table-name [ KEY | NATURAL [ INNER | FULL [ OUTER ] |
LEFT [ OUTER ] | RIGHT [ OUTER ] JOIN | CROSS JOIN table-name
ON join-condition
108. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
sub-query
์)
SELECT cust_fname, cust_lname
FROM customer
WHERE cust_id in ( SELECT cust_id
FROM order_detail
WHERE order_proc = โ101โ)
AND cust_reg = โSeoulโ
SELECT c.cust_fname, c.cust_lname
FROM customer c, order_detail o
WHERE c.cust_id in = o.cust_id
AND o.order_proc = โ101โ
AND c.cust_reg = โSeoulโ
134. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
returning function result
RETURN๋ฌธ์ ์ฌ์ฉํ์ฌ ํ๋์ ๊ฐ์ ๋๋๋ฆด ์ ์์ต๋๋ค
์)
- creator
CREATE FUNCTION fullname ( v_fname CHAR(30), v_lname CHAR(30) )
RETURNS CHAR(61)
BEGIN
DECLARE name CHAR(61);
SET name = v_fname || โ โ || v_lname;
RETURN ( name );
END;
- caller
SELECT fullname (emp_fname, emp_lname)
FROM employee;
์ฐธ๊ณ
INSERT โฆ SELECT๋ฌธ์์ ์ฌ์ฉ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด 1๊ฑด์ฉ ์ ๋ ฅ์ด ์ํ๋์ด ์ฑ๋ฅ์ ์ง๋
ํ ์ํฅ์ ๋ฏธ์น๋ฉฐ EXTRACT ํ ๋๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
135. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
dropping function
ํจ์์ ์์ฑ์๋ ํน์ dba ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ DROP FUNCTION ์ด๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ
์ฉํด์ ์ ๊ฑฐํ ์ ์์ต๋๋ค
syntax
DROP FUNCTION function_name;
์1)
DROP FUNCTION customer_list_proc;
์2)
IF EXISTS ( SELECT 1 FROM sysprocedure WHERE proc_name = โfunc_nameโ )
THEN
DROP FUNCTION function_name;
END IF;
CREATE FUNCTION โฆโฆ
164. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
create table in system
์)
CREATE TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL,
fname CHAR(30) NOT NULL,
salary UNSIGNED INT NOT NULL,
dept_id INT NOT NULL
) IN SYSTEM
์ฐธ๊ณ
์์ ํ ์ด๋ธ์ IQ Main Store ์์ญ์ ์์ฑ๋์ง ์๊ณ Catalog Store์ ์์ฑ๋๋ฉฐ 2GB์
ํ์ผํฌ๊ธฐ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ํ๊ณ ๊ฐ์ ๋๋ฌํ๋ฉด IQ Server๊ฐ down๋๊ฑฐ๋
hang ์ํ๊ฐ ๋๋๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ถ์์ฉ์ด ๋ง์ต๋๋ค.SYBASE IQ์์ ASA๋ ๋จ์ํ
Catalog๋ฅผ ์ํ ๊ณต๊ฐ์ด๋ฏ๋ก ์ฌ์ฉ์๋ค์ ์ฌ์ฉ์ ๊ธํ์ฌ ์ฃผ์ญ์์ค.
165. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
create table
์)
CREATE TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL IQ UNIQUE(20000),
fname CHAR(30) NOT NULL IQ UNIQUE(20000),
salary UNSIGNED INT NOT NULL IQ UNIQUE(20000),
dept_id INT NOT NULL IQ UNIQUE(50),
PRIMARY KEY (emp_id),
FOREIGN KEY (dept_id) REFERENCES dept(dept_id)
)
166. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
create table-partition
12.5 ์ด์ ๋ฒ์ ผ์์๋ ๋งค์ฐ ํฐ ํฉํธ ํ ์ด๋ธ์ UNION ALL VIEW๋ฅผ ํตํด ํํฐ์ ์ฒ๋ฆฌํ์ฌ
์ง์ ๋ฐ ๋ก๋ฉ์ ๋ํ ์ฑ๋ฅ์ ํฅ์ ํ์์ต๋๋ค. ๋จ, ์ด ๋ ํ ์ด๋ธ ์์ฑ ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋
DBA๊ฐ ๋ชจ๋ ์๋์ผ๋ก ์์ ํด์ผ ํฉ๋๋ค.
์ง์๋ ๊ฐ๊ฐ์ ํ ์ด๋ธ์ ํ๋๋ก ๋ฌถ์ด์ฃผ๋ ๋ทฐ๋ฅผ ํตํด ๊ฐ๋ฅํ๊ณ ์ง์ ์คํ์ ๊ฐ ํํฐ์ ๋ณ๋ก
๋ณ๋ ฌ์ฒ๋ฆฌ ํฉ๋๋ค. ๊ฐ ํํฐ์ ๋ ํฉํธ ํ ์ด๋ธ๋ค์ ๋๋ฉ์ ํ ์ด๋ธ์ ๋ํ FK ์ ์ธ์ด ์ ํ๋
์ด์ผ ํฉ๋๋ค.
๋งค์ฐ ์ปค๋ค๋ ํ ์ด๋ธ์ ๋ํ ๋ก๋ฉ ์์ ์ ๋ฐ์ํ๋ HG ์ธ๋ฑ์ค์ ๋ํ ์ค๋ฒํค๋๋ฅผ ๊ฐ์์
ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
t1
t2
t3
PartitionedBig Fact Table
CREATE VIEW bigtable AS
SELECT * FROM t1
UNION ALL
SELECT * FROM t2
UNION ALL
SELECT * FROM t3
UNION ALL VIEW
167. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
alter table
syntax
ALTER TABLE [owner.]table-name
{ADD column-definition [column-constraint]โฆ
| ADD table-constraint
| MODIFY column-name [not] null
| DROP column-name
| DROP unique
| DROP primary key
| DROP foreign key
| RENAME new-table-name
| RENAME old-column-name TO new-column-name}
์)
ALTER TABLE employee
ADD OFFICE CHAR(20) NOT NULL; // ๋ฐ์ดํฐ๊ฐ ์์ ๋ vs. ์์ ๋
ALTER TABLE employee
MODIFY office NULL; // ๋ฐ์ดํฐ๊ฐ ์์ ๋ vs. ์์ ๋
ALTER TABLE employee
DROP office;
168. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
drop table
syntax
DROP TABLE [owner.]table-name
์ด ํ ์ด๋ธ๊ณผ ์ฐ๊ด๋์ด์ง JOIN INDEX๊ฐ ์กด์ฌํ๋ค๋ฉด ๋จผ์ DROP ํ๊ณ ๊ทธ ํ์ DROP
TABLE์ ํด์ผ ํฉ๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํ์ฌ ์ก์ธ์ค ํ๊ณ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
User โxxx_userโ has the row in โxxx_tableโ locked
212. ์ด ๋ฌธ์๋ฅผ ์์ ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค.
transaction์ ์ดํด
O
update test set a = 1
rollback;
onon, off
X
update test set a = 1;
rollback;
offon, off
2 statement per 1 batch
1 statement per 1 batch
compound statement
๋น๊ณ
X
update test set a = 1
rollback;
offon, off
O
X
X
O
Rollback
update test set a = 1;
rollback;
onoff
update test set a = 1;
rollback;
onon
BEGIN
update test set a = 1;
rollback;
END;
offon, off
BEGIN
update test set a = 1;
rollback;
END;
onon, off
๋ด์ฉChainedAuto_Commit
Auto_Commit์ด ์คํ๋๋ ์์