10. ๋ฐ์ดํฐ ๋ ๋ฆฝ์ฑ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ์ ์ฌ
์
ํ๋ก๊ทธ๋จ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ ผ๋ฆฌ์ ๊ตฌ์กฐ
A
B
C A ๋ฌผ๋ฆฌ์
D ๋ฐ์ดํฐ๋ฒ ์ด์ค
์์ฉ ํ๋ก๊ทธ๋จ 1 B
C
๋ ผ ๋ฌผ
B ๋ฆฌ D ๋ฆฌ
์ฌ์ ์ฌ์ A B C
E ์ ์ D E F
๊ตฌ E ๊ตฌ
F G H ...
์์ฉ ํ๋ก๊ทธ๋จ 2 ์กฐ ์กฐ
F
G
G
H
A
์์ฉ ํ๋ก๊ทธ๋จ 3 C
INFORMIX User 10
20. SQL ๊ฐ์
๏ผ SQL ์ด๋ ๋ฌด์์ธ๊ฐ
๏ผ SQL ์ ์ข ๋ฅ
๏ผ DB ๋ด์ object ์ด๋ฆ ๊ท์น
๏ผ ์ธํฌ๋ฏน์ค ์๋ฃํ (Data Type)
๏ผ Character Data Type
๏ผ Numeric Data Type
๏ผ Large Object Data Type
๏ผ Time Data Type
๏ผ Row Data Type
๏ผ Collection Data Type
๏ผ Complex Data Type
24. ์ธํฌ๋ฏน์ค ์๋ฃํ (data type)
Character char
Numeric Exact varchar
Built-in Data Type Large-object Approximate lvarchar
User-defined Data Type Time byte decimal/numeric
Complex Data Type boolean text money
Opaque Data Type blob integer/int
Distinct Data Type clob smallint
Row Type Named Row Type date int8
Collection Type Unnamed Row Type datetime serial
set interval serial8
list decimal
multiset float
real
INFORMIX User 24
27. Numeric Data Type
๏ถ float or double precision
๏ต ๋ถ๋ ์์์ ์ค์๋ฅผ ์ ์ฅ
๏ต ์ ํจ์๋ฆฌ์ 16 ๊น์ง ํํ ๊ฐ๋ฅ
๏ถ real or smallfloat
๏ต ๋ถ๋ ์์์ ์ค์๋ฅผ ์ ์ฅ
๏ต ์ ํจ์๋ฆฌ์ 8 ๊น์ง ๊ฐ๋ฅ
INFORMIX User 27
28. Large-Object Data Type
๏ถ Large-Object data type
๏ต text
๏ง 2G ๊น์ง์ ASCII character ํ์์ object ๋ฅผ ์ ์ฅ
๏ต byte
๏ง 2G ๊น์ง์ binary character ํ์์ object ๋ฅผ ์ ์ฅ
๏ถ Smart Large Object data type
๏ต clob
๏ง 4T ๊น์ง์ ASCII character ํ์์ object ๋ฅผ ์ ์ฅ
๏ต blob
๏ง 4T ๊น์ง์ binary character ํ์์ object ๋ฅผ ์ ์ฅ
INFORMIX User 28
30. Row Data Type
๏ถ C ์ธ์ด์ ๊ตฌ์กฐ์ฒด์ ์ ์ฌํ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ์ ๋ชจ์
๏ถ Unnamed Row Data Type
create table part ( part_id serial ,
cost decimal,
part_dimensions row (length decimal, width decimal,
height decimal, weight
decimal) );
insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0));
๏ถ Named Row Data Type
create row type dimension_t ( length decimal, width decimal,
height decimal, weight decimal);
create table part ( part_id serial, cost decimal, part_dimensions
dimension_t);
constructor Cast operator Row data type
insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0)::dimension_t;
๏ถ Row Data Type ๋ฐ์ดํฐ ์กฐํ
select part_id, cost, part_dimensions from part
where part_dimensions.weight > 100;
INFORMIX User 30
31. Collection Data Type
๏ถ Set
๏ต ๋ฐ์ดํฐ ์ ๋ ฅ ์์์ ์๋ฏธ ์๊ณ , ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์์
alter table part add (defective_dates set(date not null));
insert into part (part_id, defective_dates)
values (0,(set{2/23/2001,3/15/2001}));
select * from part where โ1/26/2001โ in defective_dates;
๏ถ MultiSet
๏ต ๋ฐ์ดํฐ ์์์ ์๋ฏธ ์๊ณ , ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํจ
๏ถ List
๏ต ๋ฐ์ดํฐ ์์๊ฐ ์๋ฏธ ์๊ณ , ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํจ
INFORMIX User 31
32. Complex Data Type
๏ถ User-defined Data Types (UDTs) ๋ผ๊ณ ๋ถ๋ฅธ๋ค
๏ถ Distinct Types
๏ต ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ฐ์ดํฐํ์ ๊ธฐ๋ฐ์ผ๋กํ ์๋ก์ด ๋ฐ์ดํฐํ์ ๋ํ๋ธ๋ค
create distinct type inches as decimal;
create row type dimension_t ( length inches, width inches, . . . );
๏ถ Opaque Data Types
๏ต C ์ธ์ด๋ JAVA ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐํ์ ๋ด๋ถ ๊ตฌ์กฐ์ ํจ์๋ฅผ ์ ์ํ๋ค
๏ต Create Opaque Type ๋ฌธ์ ์ด์ฉํ์ฌ ์๋ก์ด ๋ฐ์ดํฐํ์ ๋ฑ๋กํ๋ค
๏ต Create Function ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด ๋ฐ์ดํฐํ์ ์ง์ํ๋ ํจ์๋ฅผ ๋ฑ๋กํ๋ค
INFORMIX User 32
52. SELECT
๏ถ ๋ฌธ๋ฒ
Select ๊ฐ์ ธ์ฌ ์ปฌ๋ผ ๋ฆฌ์คํธ
From ํ ์ด๋ธ ์ด๋ฆ
Where ๊ฐ์ ธ์ฌ ์กฐ๊ฑด
Group by ๊ทธ๋ฃน์ผ๋ก ๋ง๋ค ๋์ ์ปฌ๋ผ
Having ๊ทธ๋ฃน๋ด์ ๊ฐ์ ธ์ฌ ์กฐ๊ฑด
Order by ์ ๋ ฌ ๊ธฐ์ค ์ปฌ๋ผ
Into temp ์์ํ ์ด๋ธ์ ์ด๋ฆ
INFORMIX User 52
53. Select ์ ์ (1)
SYNTAX
SELECT * FROM customer;
Select *
From table_name ;
S ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์จ๋ค .
SYNTAX
SELECT distinct customer_num
Select distinct ์ปฌ๋ผ์ด๋ฆ
FROM orders
From table_name ;
๏ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ์ค ์ ์ผํ ๊ฐ๋ง์
๊ฐ์ ธ ์จ๋ค .
INFORMIX User 53
54. Select ์ ์ (2)
SYNTAX
SELECT phone[2,3] FROM
Select column [ first, last ] customer;
From table_name ;
Output :
Phone
๏ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ์ first ๋ถํฐ last ๊น 08
์ง๋ฅผ 11
๊ฐ์ ธ์จ๋ค . 12
SYNTAX
SELECT substr(phone,2,3)
Select substr(column,first,n) FROM customer;
From table_name ;
Output :
(expression)
๏ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ์ first ๋ถํฐ n ๊ฐ์ ๋ฌธ์๋ฅผ
789
๊ฐ์ ธ์จ๋ค .
822
328
INFORMIX User 54
55. Select ์ ์ (3) โ where ์กฐ๊ฑด ์
์ฉ
SYNTAX
SELECT stock_num, manu_code, unit
Select . . . FROM stock
From . . . WHERE unit != โcaseโ;
Where [ ์กฐ๊ฑด ]
] ํน์ row ๋ฅผ ๊ฐ์ ธ์ด . ๏ stock ํ ์ด๋ธ ์ค unit ์ปฌ๋ผ ๊ฐ์ด case
๏ join ์ ์กฐ๊ฑด ์ธ ๊ฒ๋ง
๊ฐ์ ธ์จ๋ค .
SELECT stock_num, manu_code, unit
FROM stock
WHERE unit != โcaseโ;
๏ stock ํ ์ด๋ธ ์ค unit ์ปฌ๋ผ ๊ฐ์ด case
๊ฐ ์๋ ๊ฒ๋ง ๊ฐ์ ธ์จ๋ค .
INFORMIX User 55
56. Select ์ ์ (3-1) โ where ์กฐ๊ฑด
์ ์ฉ
SYNTAX
Select . . . SELECT * FROM customer
From . . . WHERE customer_num in
Where ์ปฌ๋ผ in ( ๊ฐ , ๊ฐ . . . ); (118,114,106);
๏ ํ ์ด๋ธ์ ์ปฌ๋ผ์ด ๊ฐ๋ค์ค์ ์๋ค๋ฉด ๋ชจ๋
๊ฐ์ ธ์จ๋ค .
SYNTAX
Select . . . SELECT * FROM stock
From . . . WHERE unit_price between 20.00 and
Where ์ปฌ๋ผ between A and B; 30.00;
. ํ ์ด๋ธ์ ์ปฌ๋ผ์ด A ์ B ์ฌ์ด์ธ๊ฒ์ ๊ฐ์ ธ์จ๋ค .
INFORMIX User 56
57. Select ์ ์ (3-2) โ where ์กฐ๊ฑด
์ ์ฉ
SYNTAX
Select . . . SELECT * FROM customer
From . . . WHERE address2 is null;
Where ์ปฌ๋ผ is null ;
S ํ ์ด๋ธ์ ์ปฌ๋ผ์ด null ๊ฐ์ธ๊ฒ์ ๊ฐ์ ธ์จ๋ค .
SYNTAX
Select . . . SELECT * FROM customer
From . . . WHERE address2 is not null;
Where ์ปฌ๋ผ is not null ;
. ํ ์ด๋ธ์ ์ปฌ๋ผ์ด null ๊ฐ์ด ์๋๊ฒ์ ๊ฐ์ ธ์จ๋ค .
INFORMIX User 57
58. Select ์ ์ (3-3) โ where ์กฐ๊ฑด
์ ์ฉ
SYNTAX
Select . . . SELECT * FROM customer
From . . . WHERE phone[1,3] matches
โ415โ;
Where ์ปฌ๋ผ matches โ* ๊ฐ *โ;
SELECT * FROM customer
WHERE company matches
S ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๊ฐ์ ํฌํจํ ๊ฒ์ ๊ฐ์ ธ์จ๋ค . โ*City*โ;
SYNTAX
Select . . . SELECT customer_num , company
From . . . FROM customer
Where ์ปฌ๋ผ like โ% ๊ฐ %โ; WHERE company like โCity%โ;
. ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๊ฐ์ ํฌํจํ ๊ฒ์ ๊ฐ์ ธ์จ๋ค .
INFORMIX User 58
59. Select ์ ์ (4) โ ์ ๋ ฌ
SYNTAX
Select . . . SELECT stock_num, manu_code
From . . . FROM stock
Order by ์ปฌ๋ผ ; ORDER BY stock_num;
๏ stock ํ ์ด๋ธ์ row ๋ฅผ stock_num
์์๋ก ๊ฐ์ ธ์จ๋ค .
SELECT stock_num, manu_code
FROM stock
ORDER BY stock_num desc;
๏ stock ํ ์ด๋ธ์ row ๋ฅผ stock_num
๋ด๋ฆผ ์์๋ก ๊ฐ์ ธ์จ๋ค .
INFORMIX User 59
60. Select ์ ์ (5) โ ์กฐ๊ฑด์์ ์ฌ์ฉ
SYNTAX
CASE SELECT title,
CASE movie_type
WHEN condition1 THEN result1
WHEN 1 THEN โHORRORโ
WHEN condition2 THEN result2 WHEN 2 THEN โCOMEDYโ
. . . WHEN 3 THEN โROMANCEโ
ELSE result n WHEN 4 THEN โWESTERNโ
END ELSE โUNCLASSIFIEDโ
END,
S ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ๊ฐ์ ์ถ๋ ฅํ๋ค . our_cost
FROM movie_titles;
INFORMIX User 60
61. Select ์ ์ (5-1) โ ์กฐ๊ฑด์์ ์ฌ
์ฉ
SYNTAX
SELECT fname,
NVL(addr, โAddress is missingโ)
NVL(value1, value2) as address
FROM employees;
๏ value1 ์ด null ๊ฐ์ด๋ฉด value2 ๋ฅผ ์ถ๋ ฅํ๋ค . Input :
fname address
Peter 3318 Rockdale
Paul NULL
Output :
fname address
Peter 3318 Rockdale
Paul Address is missing
INFORMIX User 61
62. Select ์ ์ (5-2) โ ์กฐ๊ฑด์์ ์ฌ
์ฉ
SYNTAX
SELECT DECODE
DECODE(value1, value2, value3, (city, โMenlo Parkโ, โlocalโ,
value4, . . . value n ) โPalo Altoโ, โTall Treeโ, city)
city
FROM customer;
๏ value1 ์ด Input : Output :
value2 ์ด๋ฉด value3 ์ return ํ๊ณ , city city
value4 ์ด๋ฉด value5 ๋ฅผ return ํ๊ณ , Menlo Park Local
์๋๋ฉด valuen ์ return ํ๋ค . Santa Clara Santa Clara
Palo Alto Tall Tree
San Francisco San Francisco
INFORMIX User 62
63. Select ์ ์ (6) โ function ์ ์ฌ
์ฉ
SYNTAX
UPDATE orders
today SET order_date = TODAY
current WHERE order_num = 1005;
INSERT INTO orders VALUES
(0, TODAY, 120, NULL, NULL, NULL);
S ์ค๋ ๋ ์ง๋ฅผ return ํ๋ค .
๏ today : ์ฐ , ์ , ์ผ CREATE TABLE new_acct (
๏ current : ์ฐ , ์ , ์ผ , ์ , ๋ถ , ์ด , ๊ฐ col1 int,
col2 datetime year to day
default current year to day );
DELETE FROM cust_calls
WHERE res_dtime < CURRENT
YEAR TO MINUTE;
SELECT * FROM orders
WHERE
DAY(ord_date)<DAY(CURRENT);
SELECT * FROM cust_calls
WHERE call_dtime BETWEEN
โ1997-1-1 00:00:00โ AND
CURRENT;
INFORMIX User 63
64. Select ์ ์ (6-1) โ Algebraic
SYNTAX
SELECT * FROM orders
ABS ( num_expression ) WHERE ABS(ship_charge) > 20;
MOD ( dividend, divisor ) SELECT
POW ( base, exponent ) MOD(today-mdy(1,1,year(today)),30)
ROOT ( radicand, index ) default index:2 FROM orders;
SELECT * FROM circle
ROUND ( expr, factor ) default factor:0
WHERE (3.14 * POW(radius,2)) <
SQRT ( sqrt_radicand ) 1000;
TRUNC ( expr, factor ) default factor:0 SELECT ROOT(9) FROM square;
SELECT ROOT(64,3) FROM cube;
SELECT SQRT(9) FROM angles;
INFORMIX User 64
65. Select ์ ์ (6-2) โ
Log,hex,length
SYNTAX
EXP (float_expression) SELECT EXP(3) FROM angles;
SELECT LOGN(population) FROM history
LOGN (float_expression)
ORDER BY date;
LOG10 (float_expression) SELECT LOG10(distance) +1 digits
HEX (expression) FROM travel;
LENGTH(expression) SELECT tabname, HEX(partnum)
FROM systables;
SELECT HeX(order_num + 1)
FROM orders;
SELECT LENGTH(fname) +
LENGTH(lname),
LENGTH(โHow many bytes ?โ)
FROM customer;
INFORMIX User 65
66. Select ์ ์ (6-3) โ time
SYNTAX
SELECT * FROM order
DATE (non_date_expr) 1. WHERE
DAY (date/datetime_expr) order_date<DATE(โ12/31/99โ);
MONTH (date/datetime_expr) 2. WHERE order_date < DATE(365);
WEEKDAY (date/datetime_expr) 3. WHERE DAY(order_date) >
DAY (CURRENT);
YEAR (date/datetime_expr)
SELECT order_num, MONTH(order_date)
EXTEND (datetime_expr, first to last) FROM orders;
MDY (month, day, year) SELECT * FROM orders
WHERE WEEKDAY(paid_date) =
WEEKDAY(CURRENT);
SELECT order_num FROM orders
WHERE YEAR(ship_date) <
Date(365) = 12/31/1899+365day = 12/31/1900
YEAR(TODAY);
WEEKDAY ๋ ์ผ์์ผ์ 0 ์ผ๋ก ์์ํ์ฌ
๊ฐ ์์ผ์ ๋ํ๋ธ๋ค
0 : Sunday, 1 : Monday, โฆ
INFORMIX User 66
67. Select ์ ์ (6-4) โ time
SYNTAX
SELECT TO_CHAR(begin_date,
โ%A %B %d, %Y %Rโ) FROM tab1;
TO_DATE (String [,fmt] ) UPDATE tab1
TO_CHAR (String [,fmt] ) SET begin_date = TO_DATE
(โWednesday February 07, 01 14:17โ,
โ%A %B %d, %Y %Rโ);
The full weekday name as defined
%A Input :
in the locale
begin_date
The full month name as defined 2001-02-07 14:17
%B
in the locale
The day of the month as a decimal Output :
%d
number begin_date
Wednesday February 07, 01 14:17
%Y The year as a 4-digit decimal number
%R The time in 24-hour notation
INFORMIX User 67
68. Select ์ ์ (6-5) โ
trigonometric
SYNTAX
SELECT COS(degrees*180/3.14)
COS/SIN/TAN (radian_expr) FROM anglestb1;
ASIN/ACOS/ ATAN (numeric_expr) SELECT SIN(radians) FROM anglestb1;
ATAN2 (y,x) SELECT TAN(radians) FROM anglestb1;
SELECT ACOS(-0.73) FROM anglestb1;
SELECT ASIN(-0.73) FROM anglestb1;
SELECT ATAN(-0.73) FROM anglestb1
WHERE angles > ATAN2(4,5);
INFORMIX User 68
69. Select ์ ์ (6-6) โ string
SYNTAX
TRIM ( source_expr) SELECT TRIM(c1),
TRIM(TRAILING โ#โ FROM
TRIM ({ LEADING|TRAILING|BOTH } c1),
[trim_expr] FROM source_expr) TRIM(LEADING FROM c1)
TRIM ( trim_expr FROM source_expr) FROM tab;
UPDATE c1 = โxyzโ FROM tab
WHERE LENGTH(TRIM(c1))=5;
SELECT c1, TRIM(LEADING โ#โ FROM
TRIM(TRAILING โ%โ FROM โ###abc
%%%โ))
FROM tab;
INFORMIX User 69
70. Select ์ ์ (6-7) โ string
SYNTAX
SELECT REPLACE(โMighxzy xzimeโ,โxzโ,โtโ)
REPLACE(string,old [,new] ) FROM mytable;
Output :
๏ string ์ old ๊ฐ์ new ๋ก ๋์ฒดํ๋ค . (constant)
Mighty time
INFORMIX User 70
71. Select ์ ์ (6-8) โ string
SYNTAX
SELECT LPAD(โHere we areโ,16,โ-_โ )
FROM mytable;
LPAD(string,length [,pad] ) SELECT RPAD(โWhere are youโ,18,โ?!โ)
RPAD(string,length [,pad] ) FROM mytable;
Output :
(constant)
-_-_-Here we are
W ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ํน์ ๋ฌธ์๋ฅผ ์ฑ์
Length ๋งํผ์ ๋ฌธ์์ด์ ๋ง๋ ๋ค .
(constant)
Where are you?!?!?
INFORMIX User 71
72. Select ์ ์ (6-9) โ string
SYNTAX
SELECT city, LOWER(city), UPPER(city),
UPPER (column or string) INITCAP(city)
LOWER(column or string) FROM weather
INITCAP (column or string) WHERE UPPER(city) = โSUNNYVALEโ;
Output :
city
๏ UPPER : ๋ชจ๋ ๋๋ฌธ์๋ก
sunnyVale
๏ LOWER : ๋ชจ๋ ์๋ฌธ์๋ก
๏ INITCAP : ์ฒ์ ๋ฌธ์๋ง ๋๋ฌธ์๋ก
city (constant) (constant) (constant)
sunnyVale sunnyvale SUNNYVALE Sunnyvale
INFORMIX User 72
73. Select ์ ์ (6-10) โ aggregate
SYNTAX
SELECT count(*) FROM stock;
COUNT(*) SELECT sum(total_price) FROM stock;
AVG ( [DISTINCT|UNIQUE] column) SELECT city,state,count(*)
MAX ( [DISTINCT|UNIQUE] column) FROM customer
MIN ( [DISTINCT|UNIQUE] column) GROUP BY city,state;
SUM ( [DISTINCT|UNIQUE] column) SELECT order_num,sum(total_price)
FROM items
COUNT([DISTINCT|UNIQUE] column) GROUP BY order_num;
RANGE (expr)
STDEV (expr)
VARIANCE (expr)
INFORMIX User 73
74. Select ์ ์ (7) โ group by,having
SYNTAX
SELECT order_num,sum(total_price)
SELECT . . . FROM items
FROM . . . GROUP BY order_num
GROUP BY ์ปฌ๋ผ HAVING COUNT(*) > 2;
HAVING ์กฐ๊ฑด ;
H ๊ธฐ์ค ์ปฌ๋ผ์ ์ํด ๋ง๋ค์ด์ง group ์์์
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน์ ๊ฒฐ๊ณผ๋ง์ ๊ฐ์ ธ์จ๋ค .
INFORMIX User 74
81. Select ์ ์ (8-2) โ First N
SYNTAX
SELECT FIRST 10 name, salary
SELECT FIRST n FROM emp
ORDER BY salary DESC;
O ์ง์์ ๊ฒฐ๊ณผ์ค ์ฒ์ n ๊ฐ์ row ๋ฅผ ๊ฐ์ ธ์ด .
INFORMIX User 81
94. SPL ์์ฑ ๋ฐ ์คํ - ๋งค๊ฐ๋ณ์์ ๋ฆฌ
ํด๊ฐ
create procedure delete_order (p_order_num int default null )
returning int, int;
default ๊ฐ
define item_count int;
select count(*) into item_count from items
๋งค๊ฐ๋ณ์
where order_num=p_order_num;
delete from items where order_num = p_order_num;
delete from orders where order_num = p_order_num;๋ ๊ฐ์ ์ ์ ๋ฐํ ์์
returning p_order_num, item_count;
end procedure; ๋ ๊ฐ์ ์ ์ ๋ณ์ ๋ฐํ
๏ถ DBACCESS
execute procedure delete_order (1001) ;
๏ถ ESQL/C
EXEC SQL execute procedure delete_order(:p_order_num)
into :p_order_num, :p_item_count;
INFORMIX User 94
95. SPL ์์ฑ ๋ฐ ์คํ - ์ปค์์ฌ์ฉ
๏ถ SPL ESQL/C
EXEC SQL declare geti cursor for
create procedure get_items() execute procedure get_items();
returning integer, char(3), integer; EXEC SQL open geti
while(1) {
define p_stock_no integer; EXEC SQL fetch geti
define p_manu_code char(3); into :p_num, :p_code, :p_qty;
define p_quantity integer; if (sqlca.sqlcode == 100)
break;
foreach }
select stock_num, manu_code, quantity SQL close geti;
EXEC
into p_stock_no, p_manu_code, p_quantity
from items
return p_stock_no, p_manu_code, p_quantity with resume;
end foreach;
end procedure;
์ปค์ ์ฌ์ฉ
foreach ๋ฌธ์์์ ๊ณ์ ๋ฆฌํด๊ฐ์ ๋ฐํํ๋๋ก ํ๋ค
INFORMIX User 95
96. SPL ์์ฑ ๋ฐ ์คํ - ํธ์ถ / ์ ๊ฑฐ
๏ถ SQL ๋ฌธ์์ ํธ์ถ
select * from orders where order_num = get_biggest_order(114);
insert into old_orders execute procedure get_orders(114);
๏ถ SPL ์์ ํธ์ถ
create procedure give_disconnect (p_customer_num integer)
define p_order_num integer;
call get_biggest_order (p_customer_num ) returning p_order_num;
:
end procedure
๏ถ SPL ์ ๊ฑฐ
drop procedure get_biggest_order;
INFORMIX User 96
97. SPL ๊ตฌ๋ฌธ - ๋ณ์
๏ถ SPL ๋ด๋ถ์์ ๋ณ์ ์ ์ธ
๏ต define p_order_date date; ์ ํจํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃํ
๏ต define p_customer_num like orders.customer_num;
๏ต define global global_bar integer default 1;
๏ต define blob_var references text; ๋ช ์ํ ํ ์ด๋ธ ์ปฌ๋ผ์ ์๋ฃํ
์ธ์ ์์์ ์ ์ญ๊ฐ์ ๊ฐ์ง๋ค BLOB ์๋ฃํ
๏ถ ๋ณ์๊ฐ ํ ๋น
๏ต let c = 10; let d = 5;
๏ต let p_order_date = today;
๏ต let a,b = 10,c+d;
๏ต let a,b = (select col_a, col_b from tab1 where col_c=10);
๏ต let a = proc_name();
๏ต let a = c || d;
INFORMIX User 97
98. SPL ๊ตฌ๋ฌธ - ์กฐ๊ฑด์
๏ถ ๊ตฌ๋ฌธ
IF ์กฐ๊ฑด์ THEN ๋ฌธ์ฅ 1
ELIF ์กฐ๊ฑด์ THEN ๋ฌธ์ฅ 2
ELSE ๋ฌธ์ฅ 3
END IF
๏ถ ์กฐ๊ฑด์์ ์
if exists (select order_num from orders where order_num = 1023) then
:
end if
if p_total_price > all
(select total_price from items where order_num = 1023) then
:
end if
if p_customer_name matches โA*โ then
:
end if
INFORMIX User 98
99. SPL ๊ตฌ๋ฌธ - ๋ฃจํ
๏ถ FOREACH
foreach select ship_charge into p_ship_charge from orders
:
end foreach;
๏ถ WHILE โป ๋ฃจํ ์ ์ด
for i = 1 to 10
while i < nbr_rows if i = 5 then
insert into test_tab values ( i ); continue for;
elif i = 8 then
let i = i + 1;
exit for;
end while end if
๏ถ FOR end for;
for i = 1 to 10 step 2
:
end for
for i in (1,5,10,15) โฆ end for
for i in (1 to 20 step 5, 20 to 1 step โ5, 1,2,3,4,5) โฆ end for
INFORMIX User 99
100. SPL ๊ตฌ๋ฌธ โ dbinfo ์ฌ์ฉ
๏ถ serial ๊ฐ ๋ฐํ
define ser int;
insert into orders (order_num, order_date, customer_num)
values (0, โ04/01/99โ, 102);
let ser = dbinfo(โsqlca.sqlerrd1โ);
๏ถ ์ฒ๋ฆฌ๋ ํ์ ์ ๋ฐํ
define num_rows int;
delete from orders where customer_num = 104;
let num_rows = dbinfo(โsqlca.sqlerrd2โ);
INFORMIX User 100
101. SPL ๊ตฌ๋ฌธ - ๊ธฐํ
๏ถ ์ ๋ฐ์ดํธ ์ปค์
define p_ship_date date;
์ ๋ฐ์ดํธ ์ปค์์ ์ด๋ฆ์ ๋ช ์ํด์ผ ํ๋ค
begin work;
foreach cur1 for
select ship_date into p_ship_date from orders
where order_date < today - 100
if p_ship_date is not null then ํ์ฌ ์ปค์๊ฐ ์คํํ๊ณ ์๋ ํ
delete from orders where current of cur1;
end if
end foreach;
commit work; ์ ๋ฐ์ดํธ ๋ ํ์ lock ํด์
๏ถ OS ๋ช ๋ น์ด ํธ์ถ
system โecho โโDelete Operation Completedโโ | mail judyโ ;
system โmail โs violation โ || usr1 || โ โ || usr2 || โ< vio.fileโ;
INFORMIX User 101
103. Trigger - Event / Action
๏ถ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ (event)
๏ต INSERT ON ํ ์ด๋ธ์ด๋ฆ
๏ต DELETE ON ํ ์ด๋ธ์ด๋ฆ
event
๏ต UPDATE ON ํ ์ด๋ธ์ด๋ฆ update orders
๏ต UPDATE OF ์ปฌ๋ผ์ด๋ฆ ON ํ ์ด๋ธ์ด๋ฆ set ship_instruct =
โexpressโ
๏ถ ํธ๋ฆฌ๊ฑฐ ์ก์ (action) where customer_num =
๏ต BEFORE ( SQL ๋ฌธ ) 106;
๏ต FOR EACH ROW ( SQL ๋ฌธ )
๏ต AFTER ( SQL ๋ฌธ ) 106
๏ถ ์์ 106
create trigger test1 update on orders action
before (execute procedure check_permission()) execute
check_permission
for each row (execute procedure log_chg()) update 1 row
after (execute procedure log_total()); execute log_chg
update 1 row
execute log_chg
execute log_total
INFORMIX User 103
104. Trigger - referencing
๏ถ ํธ๋ฆฌ๊ฑฐ ๋์ ์ , ํ์ ๊ฐ์ ๊ตฌ๋ถํ๊ธฐ ์ํ์ฌ correlation name ์ ๋ถ์ฌ
๏ถ NEW, OLD ๋ ํค์๋๋ก DELETE ์ด๋ฒคํธ์์๋ NEW ๊ฐ ์ฌ์ฉ ๋ ์ ์
๊ณ , INSERT ์ด๋ฒคํธ์์๋ OLD ๊ฐ ์ฌ์ฉ ๋ ์ ์๋ค .
๏ถ ์์
create trigger items_upd update of total_price on items
referencing new as post old as pre
for each row
(update orders
set order_price = order_price +
post.total_price = pre.total_price
where order_num = post.order_num );
INFORMIX User 104
105. Trigger - when
๏ถ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋์์๋ WHEN ์ ์ ์กฐ๊ฑด์ด ๋ง์กฑํ๋์ง ๋จผ์ ๊ฒ
์ฌํ ํ ์กฐ๊ฑด์ด ๋ง์ ๋์ ํธ๋ฆฌ๊ฑฐ ์ก์ ์ด ๋์ํ๋ค .
๏ถ ์์
create trigger ins_cust_calls insert on cust_calls
referencing new as post
for each row when (post.call_code = โBโ)
( insert into warn_billing values (post.customer_num) );
INFORMIX User 105
116. ๋ณด์์ ์ค์ - ๊ถํ ์ ํ
๏ถ ๊ถํ ์ค์ ๋ฐฉ๋ฒ
๏ต GRANT ๊ถํ์ด๋ฆ <on ํ ์ด๋ธ์ด๋ฆ ( ์ปฌ๋ผ์ด๋ฆ )> to user ์ด๋ฆ ;
๏ต REVOKE ๊ถํ์ด๋ฆ <on ํ ์ด๋ธ์ด๋ฆ > from user ์ด๋ฆ ;
๏ต Table ์ ๊ฒฝ์ฐ ์ผ๋จ ๋ชจ๋ ๊ถํ์ ๋บ๊ณ ํ๋ํ๋ ์ค์ ํ๋ค .
๏ถ ์
GRANT DBA to user1;
GRANT CONNECT to user2;
REVOKE ALL ON tab1 from PUBLIC;
GRANT SELECT ON tab1 to user2;
GRANT DELETE,UPDATE,INSERT on tab1 to user1;
GRANT SELECT(col1,col2) on tab2 to user2;
INFORMIX User 116
117. ๋ณด์์ ์ค์ - view ์ ์ฌ์ฉ
๏ถ View ๋ ํ ์ด๋ธ์ ์ผ๋ถ ํน์ ๊ณ์ฐ๋ ๊ฐ๋ฑ์ ์ค์ ๋ ์ ์๋ค .
๏ถ ์
create view cust_seoul as
select * from customer where city=โ ์์ธโ ;
create view big_order_won as
select total_price*1200 from orders where total_price > 10000;
create view detail_info_cust as
select company, order_num,total_price
from customer,orders
where customer.customer_num=orders.customer_num;
INFORMIX User 117
118. ๋ณด์์ ์ค์ - role ์ ์ฌ์ฉ
๏ถ Role ์ด๋ , ์ฌ์ฉ์์ ๊ทธ๋ฃน ๊ถํ์ ์ ํ์ด , ๊ฐ์ธ๋ณ๋ก๊ฐ ์๋ ๊ทธ๋ฃน๋ณ๋ก
ํด์ผํ ํ์๊ฐ ์์๋์ ์ฐ์ .
๏ถ ๊ฐ์ธ์ ๊ฐ์ธ์ ๊ถํ์ผ๋ก์ ์์ ๋ ๊ฐ๋ฅํ๊ณ , role ์ ์ผ์์ผ๋ก์์ ์์
๋ ๊ฐ๋ฅํ๋ค
๏ถ ์
Create role marketing;
Create role sales;
Grant marketing to user1,user2;
Grant sales to user3,user4;
๏ถ ๋ง์ผ user1 ์ด marketing role ๋ก์ ์์ ํ๋ ค๋ฉด ๋ค์ ๊ตฌ๋ฌธ์ ์คํํด์ผ
ํจ.
Set role marketing;
INFORMIX User 118