์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

/****************************************
  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

๋ฐ˜์‘ํ˜•

+ Recent posts