рдкреАрдПрд╕рдПрдо (рд╢реВрдиреНрдп) рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдХрд▓, Pavel Stehule рдиреЗ PostgreSQL рдХреЗ рд▓рд┐рдП SQL / PSM рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдкреВрд░рд╛ рдХрд┐рдпрд╛ред

рдлрд┐рд▓рд╣рд╛рд▓, рднрд╛рд╖рд╛ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ:


рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:

  рдлрд╝рдВрдХреНрд╢рди test74_2 рдмрдирд╛рдПрдВ рдпрд╛ рдмрджрд▓реЗрдВ ()
 $ $ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рда рджреЗрддрд╛ рд╣реИ
 рдкрд░рдорд╛рдгреБ рд╢реБрд░реВ рдХрд░реЛ
   sqlstate '03000' рдХреЗ рд▓рд┐рдП not_found condition рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ;
   not_found рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╡рдд рд╣реИрдВрдбрд▓рд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
     рд╢реБрд░реВ рдХрд░рдирд╛
       xx, yy рдЯреЗрдХреНрд╕реНрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ;
       рд╕реНрдЯреИрдХ рдХрд┐рдП рдЧрдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ xx = condition_identifier, yy = return_sqlstate;
       рд╡рд╛рдкрд╕реА xx ||  'рд╕рд┐рдЧреНрдирд▓ рд╕рдВрднрд╛рд▓рд╛' ||  yy;
     рдЕрдВрдд;
   рд╕рдВрдХреЗрдд not_found;
 рдЕрдВрдд;
 $ $ рднрд╛рд╖рд╛ psm0;

 $$ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрд╕реНрдЯ 66 (рдПрдХ рдЗрдВрдЯ, рдЖрдЙрдЯ рдЖрд░ рдЗрдВрдЯ) рдмрдирд╛рдПрдВ рдпрд╛ рдмрджрд▓реЗрдВ
 рд╢реБрд░реВ рдХрд░рдирд╛
   рдШреЛрд╖рдгрд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ sqlstate '01002'
     рд╕реЗрдЯ рдЖрд░ = рдЖрд░ + 1;
   рдШреЛрд╖рдгрд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ sqlstate '01003'
     рд╕реЗрдЯ рдЖрд░ = рдЖрд░ + 2;
   рд╕реЗрдЯ рдЖрд░ = 0;
 x: рдЬрдмрдХрд┐ a> 0 рдХрд░рддреЗ рд╣реИрдВ
      рдЕрдЧрд░ рдПрдХ% 2 = 0 рддреЛ
        рд╕рдВрдХреЗрдд sqlstate '01002';
      рдЕрдиреНрдпрдерд╛
        рд╕рдВрдХреЗрдд sqlstate '01003';
      рдЕрдВрдд рдЕрдЧрд░;
      a = a - 1 рд╕реЗрдЯ рдХрд░реЗрдВ;
    рдЬрдмрдХрд┐ рдЕрдВрдд;
 рдЕрдВрдд;
 $ $ рднрд╛рд╖рд╛ psm0;


рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рдореВрд▓ PL / pgSQL рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:



рднрд╛рд╖рд╛ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдиреЗрд╕реНрдЯреЗрдб SQL рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЦреЛрдЬ рд╣реИ - рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрд╕рд╛рдзрд╛рд░рдг рд╣реИред PSM рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реНрдерд┐рд░ рднрд╛рд╖рд╛ рд╣реИред рдПрдХ рддрд░рдл, рдкреАрдПрд▓ / pgSQL рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрд╢рд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рддрд░рдл, PSM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ PL / pgSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрдИ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА:


рд╕реНрд░реЛрдд рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рд╣реИред

Source: https://habr.com/ru/post/In117980/


All Articles