์ด ํฌ์คํ
์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
/****************************************
PL/SQL syntax ์ ๋ฆฌ
*****************************************/
----------------------------------------------------------
- * syntax ๊ธฐํธ
-
- [] : ๋๊ดํธ ์์ ๋ด์ฉ์ด ์๋ต๊ฐ๋ฅ
- | : ๋๋
- {} : ์ค๊ดํธ ์์ ๋ด์ฉ์ด ํ๋ ์ด์ ์ฌ ์ ์๋ค.
- ... : ์ ํ๊ธฐ์ ๊ฐ์ ํ์์ผ๋ก ๋ ์ฌ ์ ์๋ค.
- , : ๊ตฌ๋ถ์
----------------------------------------------------------
* ๊ธฐ๋ณธ๊ตฌ์กฐ
declare : ์คํ๋ถ์์ ์ฐธ์กฐํ ๋ชจ๋ ๋ณ์, ์์, ์ปค์, exception์ ์ ์ธ
variables, cursor, user_defined, exception
begin : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ sql๋ฌธ๊ณผ pl/sql๋ธ๋ก์ ๊ธฐ์
sql, pl/sql statements;
exception : ์คํ๋ถ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ ์ํ๋ ๋ฌธ์ฅ์ ๊ธฐ์
actions to perform wher erros occur
end;
* anonymous
syntax : [declare]
begin
statements;
statements;
statements;
[exception]
end;
* procedure
syntax : create procedure procedure_name
is
begin
statements;
statements;
[exception]
end;
* function
syntax : create function function_name
return datatype
is
begin
statements;
statements;
return value;
[exception]
end;
* PL/SQL ๋ณ์
1) scalar : ์ฃผ๋ก ๋จ์ผ๊ฐ์ ๋ณด์ . ์ฃผ์ ๋ฐ์ดํฐํ์ ์ค๋ผํด ์๋ฒ ํ
์ด๋ธ์ ์ด ์ ํ์ ๋์ํ๋ ๊ฒ๋ค์
๋๋ค.
2) composite : ๋ ์ฝ๋ ๊ฐ์ ์กฐํฉ ๋ฐ์ดํฐํ์ PL/SQL๋ธ๋ญ์์ ์กฐ์๋๊ณ ์ ์๋๋ ํ๋๊ทธ๋ฃน์ ํ์ฉํฉ๋๋ค.
3) reference : ์ฐธ์กฐ๋ฐ์ดํฐํ์ pointer๋ผ ๋ถ๋ฆฌ๋ฉฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ํญ๋ชฉ์ ์ง์ํ๋ ๊ฐ์ ๋ณด์ ํฉ๋๋ค.
4) LOB(Large Objects) : LOB๋ฐ์ดํฐํ์ locator๋ผ ๋ถ๋ฆฌ๋ฉฐ ๋ผ์ธ ๋ฐ์์ ์ง์ ๋ ํฐ ๊ฐ์ฒด์ ์์น๋ฅผ ์ง์ ํ๋ ๊ฐ์ ๋ณด์
* PL/SQL ๋ณ์ ์ ์ธ
syntax : identifier [constant] datatype [not null] [:= | default expression];
- identifier : ๋ณ์์ ์ด๋ฆ
- constant : ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ์ ์ฝ (์์)
- datatype : scalar, composite, reference, lob(large objects)
- not null : ๊ฐ์ ํฌํจํด์ผ๋ง ํ๋๋ก ํ๊ธฐ ์ํด ๋ณ์๋ฅผ ์ ์ฝ
- expression : literal, ๋ค๋ฅธ ๋ณ์, ์ฐ์ฐ์๋ ํจ์๋ฅผ ํฌํจํ๋ ํํ์
* ๋ณ์ ๊ฐ ์ง์
syntax : identifier := expression;
* ๊ธฐ๋ณธ ์ค์นผ๋ผ ๋ฐ์ดํฐ ํ
- varchar2(n) : ๋ณ์๊ธธ์ด ๋ฌธ์ ๋ฐ์ดํฐ์ ๋ํ ๊ธฐ๋ณธํ์ 32767Byte๊น์ง ๋ํดํธ ํฌ๊ธฐ๋ ์๋ค.
- number(p,s) : ๊ณ ์ ๊ณผ ์ ๋ํฌ์ธํธ ์ซ์์ ๋ํ ๊ธฐ๋ณธํ ์์์ ์ด์ p์๋ฆฌ, ์์์ ์ดํ s์๋ฆฌ
- date : ๋ ์ง์ ์๊ฐ์ ๋ํ ๊ธฐ๋ณธํ, date๊ฐ์ ์ง์ ์ดํ์ ์ด ๋จ์๋ก ๋ ์ ๋ํ ์๊ฐ์ ํฌํจํฉ๋๋ค. ๋ ์ง์ ๋ฒ์๋ bc4712๋
1์1์ผ ๋ถํฐ ad9999๋
12์ 31์ผ ์ฌ์ด
- char(n) : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ ๋ํ ๊ธฐ๋ณธํ์ 32767Byte๊น์ง. ๋ํดํธ๊ธธ์ด๋ 1
- long : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ ๋ํ ๊ธฐ๋ณธํ์ 32767Byte๊น์ง long์ ์ต๋ 2147483647Byte๊น์ง
- long raw : ์ด์ง ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ๋ฌธ์์ด์ ๋ํ ๊ธฐ๋ณธํ์ 32767Byte๊น์ง long raw๋ PL/SQL์ ์ํด ํด์๋์ง ์์
- boolean : true, false, null์ค ํ๋์ ๊ฐ
- binary_integer : -2147483647~2147483637์ฌ์ด์ ์ ์
- pls_integer : -2147483647~2147483637์ฌ์ด์ ์ ์์ ๋ํ ๊ธฐ๋ณธํ ์ ์ ๊ธฐ์ต์ฅ์น๋ฅผ ํ์๋กํจ
* %type ์์ฑ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ์ด์ด ๊ฐ์ง type์ผ๋ก ๋ณ์๋ฅผ ์ ์ธ
syntax : variable_name table_name.column_name%type
* table type :๋ฐฐ์ด์ ๊ฐ๋
(ํ
์ด๋ธ์ ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ก ์ฌ์ฉ)
syntax : type table_type_name is table of
{column_type | variable%type | table.column%type} [not null]
[index by binary_integer];
identifier table_type_name;
- table_type_name : ํ
์ด๋ธํ์ ์ด๋ฆ
- column_type : varchar2, date, number์ ๊ฐ์ ์ค์นผ๋ผ๋ฐ์ดํฐํ
- identifier : ์ ์ฒด PL/SQLํ
์ด๋ธ์ ๋ํ๋ด๋ ์๋ณ์์ ์ด๋ฆ
* record type: ๊ตฌ์กฐ์ฒด ๊ฐ๋
, ํ
์ด๋ธ์ row์ ์ฒด๋ฅผ ํ๋์ ๋ฐ์ดํฐํ์ผ๋ก ๋ํ๋
syntax : type type_name is record
(field_name1 {scalar_datatype|record_type} [not null] [{:=|default} expr],
(field_name2 {scalar_datatype|record_type} [not null] [{:=|default} expr]
...);
identifier_name type_name;
- type_name : recordํ์ ์ด๋ฆ, ์ด ์๋ณ์๋ record๋ฅผ ์ ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- field_name : record๋ด์ ํ๋๋ช
- record๋ฅผ ์ฐธ์กฐ : record_name.field_name
* %rowtype ์์ฑ: ํ
์ด๋ธ์ ์ด์ ํ๋์ ํ์
์ผ๋ก
syntax : identifier reference%rowtype
- ๊ฐ๋ณํ๋์ฐธ์กฐ : record_name.field_name
* LOB ๋ฐ์ดํฐํ(๊ฐ 4GByte๊น์ง)
1) CLOB(Character large object) : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ด์ ๋จ์ผ ๋ฐ์ดํธ ๋ฌธ์ ๋ฐ์ดํฐ์ ๋ํ๋ธ๋ญ์ ์ ์ฅ
2) BLOB(Binary large object) : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ํ ์ด์ง๊ฐ์ฒด๋ฅผ ์ ์ฅ
3) BFILE (Binary file) : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ถ์ ์ด์์์คํ
ํ์ผ์ ๋ํ ์ด์ง๊ฐ์ฒด ์ ์ฅ
4) NCLOB(national language character large object) : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ด์ ๋จ์ผ๋ฐ์ดํธ, ๋๋ ๊ณ ์ ๊ธธ์ด์ ๋ฉํฐ๋ฐ์ดํธ nchar๋ฐ์ดํฐ๋ฅผ ํ์ ์ํ์ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ
* ๋ฐ์ธ๋(bind) ๋ณ์ :SQL*PLUS์์์ ๋ณ์๋ฅผ PL/SQL์์ ์ฌ์ฉ
syntax : var[iable] [variable [number | char(n) | varchar2(n)]]
* ํธ์คํธ(host) ๋ณ์: ํธ์คํธ์ด์์ฒด์ ์ ๋ณ์๋ฅผ PL/SQL์์ ์ฌ์ฉ
syntax : :variable_name
* ๊ตฌ๋ถ๋ฌธ์
+ : ๋ง์
์ฐ์ฐ์
- : ๋บ์
์ฐ์ฐ์
* : ๊ณฑ์
์ฐ์ฐ์
/ : ๋๋์
์ฐ์ฐ์
= : ๊ด๊ณํ์ฐ์ฐ์
@ : ์๊ฒฉ์์ธ์ค์ง์์
; : ๋ฌธ์ฅ์ง์์
<> : ๊ด๊ณํ ์ฐ์ฐ์ (๊ฐ์ง์๋ค)
!= : ๊ด๊ณํ ์ฐ์ฐ์ (๊ฐ์ง์๋ค)
|| : ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์
-- : ๋จ์ผ๋ผ์ธ ์ฃผ์
/* */ : ๋ฉํฐ๋ผ์ธ ์ฃผ์
:= : ์ง์ ์ฐ์ฐ์(๋์
)
* ๋ฐ์ดํฐํ ๋ณํ ํจ์
1) to_char(value, format) : value๋ฅผ ๋ฌธ์๋ก ์ ํ
2) to_date(value, format) : value๋ฅผ ๋ ์งํ์์ผ๋ก ์ ํ
3) to_number(value, format) : value๋ฅผ ์ซ์๋ก ์ ํ
* PL/SQL์ ์ฐ์ฐ์์ ์ฐ์ ์์
1) **, not : ์ง์์น, ๋
ผ๋ฆฌ๋ถ์
2) +, - : ์๋ณ, ๋ถ์ ์ฐ์ฐ์
3) *, / : ๊ณฑ์
, ๋๋์
4) +, -, || : ๋ง์
, ๋บ์
, ์ฐ๊ฒฐ
5) =, !=, <, >, <=, >=, is null, like, between, in : ๋น๊ต์ฐ์ฐ์
6) and : ๋
ผ๋ฆฌ๊ณฑ
7) or : ๋
ผ๋ฆฌํฉ
* ์ฝ๋๊ท์ฝ (๊ถ์ฅ)
- ๋๋ฌธ์ : sql๋ช
๋ น์ด, pl/sqlํค์๋, ๋ฐ์ดํฐํ
- ์๋ฌธ์ : ์๋ณ์, ๋งค๊ฐ๋ณ์, ํ
์ด๋ธ๋ช
, ์ด๋ช
* ์ฝ๋๋ช
์ง์ ๊ท์ฝ (๊ถ์ฅ)
- ๋ณ์ : v_name
- ์์ : c_name
- ์ปค์ : name_cursor
- ์์ธ : e_name
- ํ
์ด๋ธํ : name_table_type
- ํ
์ด๋ธ๋ช
: name_table
- ๋ ์ฝ๋ํ : name_record_type
- ๋ ์ฝ๋๋ช
: name_record
- SQL*PLUS ์นํ ๋งค๊ฐ๋ณ์ : p_name
- SQL*PLUS ์ ์ญ๋ณ์ : g_name
* PL/SQL์์์ select
- ๋จ์ผํ์ ๋ฆฌํดํ๋ select๋ง ์ฌ์ฉ
syntax : select select_list
into {variable_name1[.variable_name2, ...] | record_name}
from table_name
where condition;
* cursor ์์ฑ
- sql*rowcount : ๊ฐ์ฅ ์ต๊ทผ์ sql๋ฌธ์ฅ์ ์ํด ์ํฅ์ ๋ฐ์ ํ์ ์
- sql%found : ๊ฐ์ฅ ์ต๊ทผ์ sql๋ฌธ์ฅ์ด ํ๋ ๋๋ ๊ทธ ์ด์์ ํ์ ์ํฅ์ ๋ฏธ์น๋ค๋ฉด true
- sql%notfound : ๊ฐ์ฅ ์ต๊ทผ์ sqlใด๋ฌธ์ฅ์ด ์ด๋คํ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์๋ค๋ฉด true
- sql%isopen : PL/SQL์ด ์คํ๋ ํ์ ์ฆ์ ์์์ ์ปค์๋ฅผ ๋ซ๊ธฐ๋๋ฌธ์ ํญ์ true
* if
syntax : if condition then
statements;
[elsif condition then]
statements;
else
statements;
end if;
* loop
syntax : loop
statement1;
statement2;
...
exit [when condition];
end loop;
* exit๋ฌธ
syntax : exit [when condition];
* for loop
syntax : for index_counter in [reverse] lower_bound..upper_bound loop
statement1;
statement2;
...
end loop;
- index_counter : upper_bound๋ lower_bound์ ๋๋ฌํ ๋๊น์ง loop๋ฅผ ๋ฐ๋ณตํจ์ผ๋ก์จ 1์ฉ ์๋์ ์ผ๋ก ์ฆ๊ฐํ๊ฑฐ๋ ๊ฐ์๋๋ ๊ฐ์ ๊ฐ์ง ์์์ ์ผ๋ก ์ ์ธ๋ ์ ์
- reverse : upper_bound์์ lower_bound๊น์ง ๋ฐ๋ณตํจ์ผ๋ก์จ ์ธ๋ฑ์ค๊ฐ 1์ฉ ๊ฐ์๋๋๋ก ํฉ๋๋ค.
- lower_bound : index_counter๊ฐ์ ๋ฒ์์ ๋ํ ํ๋จ๋ฐ์ด๋
- upper_bound : index_counter ๊ฐ์ ๋ฒ์์ ๋ํ ์๋จ ๋ฐ์ด๋
* while loop
syntax : while condition loop
statement1;
statement2;
...
end loop;
* cursor
- ์์์ cursor
sql%rowcount : ์ง๊ธ๊น์ง ๋ฆฌํด๋ ํ์ ์ด ์(number)
sql%found : ๊ฐ์ฅ ์ต๊ทผ์ ์ธ์ถ(fetch)๊ฐ ํ์ ๋ฆฌํดํ๋ฉด true (boolean)
sql%notfound : ๊ฐ์ฅ ์ต๊ทผ์ ์ธ์ถ(fetch)๊ฐ ํ์ ๋ฆฌํดํ์ง ์์ผ๋ฉด true (boolean)
sql%isopen : cursor๊ฐ ์ด๋ฆฌ๋ฉด true
- ๋ช
์์ cursor : ์ ์ธ, open, fetch into, close
syntax : cursor cursor_name is
select_statement;
open cursor_name;
fetch cursor_name into {variable1[,variable2, ...] | record_name};
close cursor_name;
* cursor์ for loop
syntax : for record_name in cursor_name loop
statement1;
statement2;
...
end loop;
* subquery๋ฅผ ์ฌ์ฉํ cursor for loop
syntax : for record_name in (subquery) loop
statement1;
statement2;
...
end loop;
* ๋งค๊ฐ๋ณ์์ cursor
syntax : cursor cursor_name [(parameter_name1 datatype, ...)] is
select_statement;
cursor_parameter_name [in] datatype [{:= | default} expression]
* for update์
syntax : cursor cursor_name is
select_statement
for update [nowait] [of column1[,column2,...]];
* ์ ์๋ oracle server ์๋ฌ
- access_into_null(ora-06530) : ์ด๊ธฐํ ๋์ง ์์ ๊ฐ์ฒด์ ์์ฑ์ ๋ํด ๊ฐ์ ์ง์ ํ๋ ค๊ณ ํจ
- collection_is_null(ora-06531) : ์ด๊ธฐํ ๋์ง ์์ ์ค์ฒฉ ํ
์ด๋ธ์ ๋ํด exists๋ฅผ ์ ์ธํ ๋ฉ์๋ ๋ชจ์์ ์ ์ฉ์ ์๋ํฉ๋๋ค.
- cursor_already_open(ora-06511) : ์ด๋ฏธ ์ด๋ฆฐ ์ปค์์ ์ด๊ธฐ๋ฅผ ์๋ํฉ๋๋ค.
- dup_val_on_index(ora-00001) : ์ค๋ณต๊ฐ์ ์ฝ์
์ ์๋ํฉ๋๋ค.
- invalid_cursor(ora-01001) : ์๋ชป๋ ์ปค์์ฐ์ฐ์ด ๋ฐ์ํฉ๋๋ค.
- invalid_number(ora-01722) : ์์ ๋ฌธ์์ด ์ ํ์ ์คํจ์
๋๋ค.
- login_denied(ora-01017) : ์๋ชป๋ ์ฌ์ฉ์๋ช
๊ณผ ๋น๋ฐ๋ฒํธ๋ก ์ค๋ผํด์ ๋ก๊ทธ์จํฉ๋๋ค.
- no_data_found(ora-01403) : ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ์ง ์๋ select๋ฌธ์ฅ
- not_logged_on(ora-01012) : PL/SQL์ ๋ด๋ถ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- program_error(ora-06501) : PL/SQL์ ๋ด๋ถ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- rowtype_mismatch(ora-06504) : ์ง์ ๋ฌธ์ ํฌํจ๋ ํธ์คํธ ์ปค์๋ณ์์ PL/SQL์ปค์๋ณ์์ ๋ฆฌํด์ ํ์ด ๋ค๋ฆ
๋๋ค.
- storage_error(ora-06500) : PL/SQL์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค ์จ๋ฒ๋ฆฌ๊ฑฐ๋ ๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํผ์๋จ
- subscript_beyond_count(ora-06533) : ๋ชจ์์ ์์ ๊ฐ์๋ณด๋ค ๋ ํฐ ์ธ๋ฑ์ค ๊ฐ์๋ฅผ ์ฌ์ฉํ๋ ์ค์ฒฉํ
์ด๋ธ์ ์ฐธ์กฐํฉ๋๋ค.
- subscript_outside_limit(ora-06532) : ๋ฒ์ ๋ฐ์ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฒฉํ
์ด๋ธ์ ์ฐธ์กฐ
- timeout_on_resource(ora-00051) : oracle์ด ๋ฆฌ์์ค๋ฅผ ๋๊ธฐํ๋ ๋์ ์๊ฐ์ด๊ณผ ๋ฐ์
- too_many_rows(ora-01422) : ๋จ์ผํ select๋ ํ๋ ์ด์์ ํ์ ๋ฆฌํดํฉ๋๋ค.
- value_error(ora-06502) : ๊ณ์ฐ, ๋ณํ, ์ ๋จ, ๋๋ ํฌ๊ธฐ์ ์ฝ ์ค๋ฅ๊ฐ ๋ฐ์
- zero_devide(ora-01476) : 0์ผ๋ก ๋ฐฐ๋ถ์ ์๋
* ๋ฏธ๋ฆฌ ์ ์๋์ง ์์ ์ค๋ผํด ์๋ฒ ์๋ฌ
- ์ ์ธ
syntax : exception_name exception;
- pragma exception_init๋ฌธ์ฅ์ ์ฌ์ฉํด ํ์ค์๋ฌ๋ฒํธ์ ์ ์ธ๋ ์์ธ๋ฅผ ์ฐ๊ฒฐ
syntax : exception_init(exception_name, error_number)
* ์ฌ์ฉ์ ์ ์ ์์ธ
- ์ ์ธ
syntax : exception_name exception;
- ๋ช
์์ ์ผ๋ก ์์ธ๋ฅผ ๋ฐ์์ํด
syntax : raise exception_name;
* ์์ธ ํธ๋ํ ํจ์
- sqlcode : ์๋ฌ ์ฝ๋์ ๋ํ ์ซ์๋ฅผ ๋ฆฌํด
- sqlerrm : ์๋ฌ ๋ฒํธ์ ํด๋นํ๋ ๋ฉ์ธ์ง๋ฅผ ๋ฆฌํด
* SQL์ฝ๋ ๊ฐ
- 0 : ์์ธ๊ฐ ์์ต๋๋ค.
- 1: ์ฌ์ฉ์์ ์ ์๋ฌ๋ฒํธ
- +100 : no_data_found
- ์์ ์ ์ : ํ์ค ์๋ฌ๋ฒํธ
* ์ดํ๋ฆฌ์ผ์ด์
๋ด์์ ์์ธ ๋ฐ์์ํค๊ธฐ
syntax : raise_application_error(error_number, message[,{true|false}]);
* procedure
syntax : create [or replace] procedure procedure_name
[(argument1 [mode1] datatype [{:= | default} expression]
[(argument1 [mode1] datatype [{:= | default} expression], ...])]
{is | as}
begin
pl/sql block;
end;
- or replace : procedure_name์ด ์กด์ฌํ ๊ฒฝ์ฐ procedure์ ๋ด์ฉ์ ์ง์ฐ๊ณ ๋ค์ ์์ฑ
- procedure_name : procedure๋ช
- argument : ๋งค๊ฐ๋ณ์์ ์ด๋ฆ
- mode : 3๊ฐ์ง (in:์
๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
(out:์ถ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
(in out : ์
์ถ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
- pl/sql block : procedure๋ฅผ ๊ตฌ์ฑํ๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ pl/sql์ ๋ธ๋ญ
* function
syntax : create [or replace] function function_name
[(argument1 [mode1] datatype [{:= | default} expression]
[(argument1 [mode1] datatype [{:= | default} expression], ...])]
return data_type
{is | as}
begin
pl/sql block;
end;
- or replace : procedure_name์ด ์กด์ฌํ ๊ฒฝ์ฐ procedure์ ๋ด์ฉ์ ์ง์ฐ๊ณ ๋ค์ ์์ฑ
- procedure_name : procedure๋ช
- argument : ๋งค๊ฐ๋ณ์์ ์ด๋ฆ
- mode : 3๊ฐ์ง (in:์
๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
(out:์ถ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
(in out : ์
์ถ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ)
- data_type : ๋ฐํ๋๋ ๊ฐ์ datatype
- pl/sql block : procedure๋ฅผ ๊ตฌ์ฑํ๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ pl/sql์ ๋ธ๋ญ
* procedure์ function ๋น๊ต
- procedure : pl/sql๋ฌธ์ผ๋ก์ ์คํ, ๋ฆฌํด๋ฐ์ดํฐํ ์์, ๊ฐ์ ๋ฆฌํดํ ์๋ ์๋ค.
- function : ์์ ์ผ๋ถ๋ก์ ์ฌ์ฉ, ๋ฆฌํด๋ฐ์ดํฐํ ํ์, ๋ฐ๋์ ๊ฐ์ ๋ฆฌํดํด์ผํจ
* trigger
syntax : create [or replace] trigger trigger_name
{before | after} triggering_event [of column1, ...] on table_name
[for each row [when trigger_condition]
trigger_body;
- trigger_name : trigger์ ์๋ณ์
- before | after : DML๋ฌธ์ฅ์ด ์คํ๋๊ธฐ ์ ์ trigger๋ฅผ ์คํํ ๊ฒ์ธ์ง ์คํ๋ ํ์ trigger๋ฅผ ์คํํ ๊ฒ์ธ์ง๋ฅผ ์ ์
- triggering_event : DML(insert, update, delete)
- of column : trigger๊ฐ ์คํ๋๋ ํ
์ด๋ธ์์ ์ปฌ๋ผ๋ช
์ ๊ธฐ์ ํ๋ค.
- table name : trigger๊ฐ ์คํ๋๋ ํ
์ด๋ธ ๋ช
- for each row : ์ด ์ต์
์ ์ฌ์ฉํ๋ฉด ํ ๋ ๋ฒจ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋์ด triggering๋ฌธ์์ ์ํฅ๋ฐ์ ํ์ ๋ํด ๊ฐ๊ฐ ํ๋ฒ์ฉ ์คํํ๊ณ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฌธ์ฅ๋ ๋ฒจ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋์ด DML๋ฌธ์ฅ๋น ํ๋ฒ๋ง ์คํ๋๋ค.
* trigger operation๊ฒฐ์ ํ๋ ์ธ๊ฐ์ง ํจ์
- inserting : ํธ๋ฆฌ๊ฑฐ๋ง ๋ฌธ์ฅ์ด insert์ด๋ฉด true
- updating : ํธ๋ฆฌ๊ฑฐ๋ง ๋ฌธ์ฅ์ด update์ด๋ฉด true
- deleting : ํธ๋ฆฌ๊ฑฐ๋ง ๋ฌธ์ฅ์ด delete์ด๋ฉด true
* trigger ์ ๊ฑฐ / ํ์ฑํ์ ํ
- ์ ๊ฑฐ
syntax : drop trigger trigger_name
- ํ์ฑํ์ ํ
syntax : alter trigger trigger_name {disable | enable};
์ถ์ฒ - http://fly32.net/255