CREATE PROCEDURE
CREATE PROCEDURE â ÑоздаÑÑ Ð¿ÑоÑедÑÑÑ
СинÑакÑиÑ
CREATE [ OR REPLACE ] PROCEDURE
Ð¸Ð¼Ñ ( [ [ Ñежим_аÑгÑменÑа ] [ имÑ_аÑгÑменÑа ] Ñип_аÑгÑменÑа [ { DEFAULT | = } вÑÑажение_по_ÑмолÑÐ°Ð½Ð¸Ñ ] [, ...] ] )
{ LANGUAGE имÑ_ÑзÑка
| TRANSFORM { FOR TYPE имÑ_Ñипа } [, ... ]
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| SET паÑамеÑÑ_конÑигÑÑаÑии { TO знаÑение | = знаÑение | FROM CURRENT }
| AS 'опÑеделение'
| AS 'обÑекÑнÑй_Ñайл', 'обÑекÑнÑй_Ñимвол'
| Ñело_sql
} ...ÐпиÑание
Ðоманда CREATE PROCEDURE опÑеделÑÐµÑ Ð½Ð¾Ð²ÑÑ Ð¿ÑоÑедÑÑÑ. CREATE OR REPLACE PROCEDURE ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿ÑоÑедÑÑÑ Ð»Ð¸Ð±Ð¾ заменÑÐµÑ Ð¾Ð¿Ñеделение Ñже ÑÑÑеÑÑвÑÑÑей. ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð¿ÑоÑедÑÑÑ, необÑ
одимо имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ ÑооÑвеÑÑÑвÑÑÑего ÑзÑка.
ÐÑли Ñказано Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ, пÑоÑедÑÑа ÑоздаÑÑÑÑ Ð² заданной ÑÑ ÐµÐ¼Ðµ, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей. ÐÐ¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ пÑоÑедÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¿ÑоÑедÑÑ Ð¸ ÑÑнкÑий Ñ Ñакими же Ñипами аÑгÑменÑов в ÑÑой ÑÑ ÐµÐ¼Ðµ. Ðднако пÑоÑедÑÑÑ Ð¸ ÑÑнкÑии Ñ Ð°ÑгÑменÑами ÑазнÑÑ Ñипов могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¾ Ð¸Ð¼Ñ (ÑÑо назÑваеÑÑÑ Ð¿ÐµÑегÑÑзкой).
Ðоманда CREATE OR REPLACE PROCEDURE пÑедназнаÑена Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑекÑÑего опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑеÑÑвÑÑÑей пÑоÑедÑÑÑ. С ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¸Ð¼Ñ Ð¸Ð»Ð¸ ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов (еÑли попÑÑаÑÑÑÑ ÑделаÑÑ ÑÑо, бÑÐ´ÐµÑ Ñоздана Ð½Ð¾Ð²Ð°Ñ Ð¾ÑделÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа).
Ðогда команда CREATE OR REPLACE PROCEDURE заменÑÐµÑ ÑÑÑеÑÑвÑÑÑÑÑ Ð¿ÑоÑедÑÑÑ, Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¸ пÑава доÑÑÑпа к ÑÑой пÑоÑедÑÑе не менÑÑÑÑÑ. ÐÑе дÑÑгие ÑвойÑÑва пÑоÑедÑÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð·Ð½Ð°ÑениÑ, задаваемÑе командой Ñвно или по ÑмолÑаниÑ. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð¼ÐµÐ½Ð¸ÑÑ Ð¿ÑоÑедÑÑÑ, необÑ
одимо бÑÑÑ ÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем (или бÑÑÑ Ñленом Ñоли-владелÑÑа).
ÐладелÑÑем пÑоÑедÑÑÑ ÑÑановиÑÑÑ ÑоздавÑий ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¿ÑоÑедÑÑÑ, необÑ
одимо имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ñипов ÐµÑ Ð°ÑгÑменÑов.
Ðа дополниÑелÑной инÑоÑмаÑией о ÑазÑабоÑке пÑоÑедÑÑ Ð¾Ð±ÑаÑиÑеÑÑ Ðº РазделÑ 36.4.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ñоздаваемой пÑоÑедÑÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
Ñежим_аÑгÑменÑаРежим аÑгÑменÑа:
IN,OUT,INOUTилиVARIADIC. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑIN.имÑ_аÑгÑменÑаÐÐ¼Ñ Ð°ÑгÑменÑа.
Ñип_аÑгÑменÑаТип даннÑÑ Ð°ÑгÑменÑа пÑоÑедÑÑÑ (возможно, дополненнÑй ÑÑ ÐµÐ¼Ð¾Ð¹), пÑи налиÑии аÑгÑменÑов. Тип аÑгÑменÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð°Ð·Ð¾Ð²Ñм, ÑоÑÑавнÑм или доменнÑм, либо ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑлка на ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ.
РзавиÑимоÑÑи Ð¾Ñ ÑзÑка ÑеализаÑии Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ Ñказание «пÑевдоÑипов», напÑимеÑ,
cstring. ÐÑевдоÑÐ¸Ð¿Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ, ÑÑо ÑакÑиÑеÑкий Ñип аÑгÑменÑа либо опÑеделÑн не полноÑÑÑÑ, либо ÑÑÑеÑÑвÑÐµÑ Ð²Ð½Ðµ множеÑÑва обÑÑнÑÑ Ñипов SQL.СÑÑлка на Ñип ÑÑолбÑа запиÑÑваеÑÑÑ Ð² виде
. Ðногда Ñакое Ñказание бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, Ñак как позволÑÐµÑ ÑоздаÑÑ Ð¿ÑоÑедÑÑÑ, незавиÑÑÑÑÑ Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в опÑеделении ÑаблиÑÑ.имÑ_ÑаблиÑÑ.имÑ_ÑÑолбÑа%TYPEвÑÑажение_по_ÑмолÑаниÑÐÑÑажение, иÑполÑзÑемое Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, еÑли паÑамеÑÑ Ð½Ðµ задан Ñвно. РезÑлÑÑÐ°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑводиÑÑÑÑ Ðº ÑÐ¸Ð¿Ñ ÑооÑвеÑÑÑвÑÑÑего паÑамеÑÑа. ÐÐ»Ñ Ð²ÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð¿Ð°ÑамеÑÑов, ÑледÑÑÑÐ¸Ñ Ð·Ð° паÑамеÑÑом Ñ Ð¾Ð¿ÑеделÑннÑм знаÑением по ÑмолÑаниÑ, Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
имÑ_ÑзÑкаÐÐ¼Ñ ÑзÑка, на коÑоÑом Ñеализована пÑоÑедÑÑа. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
sql,c,internalлибо Ð¸Ð¼Ñ Ð¿ÑоÑедÑÑного ÑзÑка, опÑеделÑнного полÑзоваÑелем, напÑимеÑ,plpgsql. ÐÑли пÑиÑÑÑÑÑвÑеÑÑело_sql, подÑазÑмеваеÑÑÑ ÑзÑкsql. ÐаÑÐ¸Ð°Ð½Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑого имени в апоÑÑÑоÑÐ°Ñ ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑим и ÑÑебÑÐµÑ ÑоÑного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÑегиÑÑÑа.TRANSFORM { FOR TYPEимÑ_Ñипа} [, ... ] }УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑпиÑок ÑÑанÑÑоÑмаÑий, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑименÑÑÑÑÑ Ð¿Ñи вÑзове пÑоÑедÑÑÑ. ТÑанÑÑоÑмаÑии вÑполнÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ñипами SQL и Ñипами даннÑÑ , ÑпеÑиÑиÑнÑми Ð´Ð»Ñ ÑзÑков; Ñм. CREATE TRANSFORM. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑÑÑоеннÑÑ Ñипов обÑÑно жÑÑÑко пÑедопÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² ÑеализаÑиÑÑ Ð¿ÑоÑедÑÑнÑÑ ÑзÑков, Ñак ÑÑо Ð¸Ñ Ð·Ð´ÐµÑÑ ÑказÑваÑÑ Ð½Ðµ нÑжно. ÐÑли ÑеализаÑÐ¸Ñ Ð¿ÑоÑедÑÑного ÑзÑка не Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабоÑаÑÑ Ñип и ÑÑанÑÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ оÑÑÑÑÑÑвÑеÑ, бÑÐ´ÐµÑ Ð²Ñполнено пÑеобÑазование Ñипов по ÑмолÑаниÑ, но ÑÑо завиÑÐ¸Ñ Ð¾Ñ ÑеализаÑии.
[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINERХаÑакÑеÑиÑÑика
SECURITY INVOKER(безопаÑноÑÑÑ Ð²ÑзÑваÑÑего) показÑваеÑ, ÑÑо пÑоÑедÑÑа бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ñ Ð¿Ñавами полÑзоваÑелÑ, вÑзвавÑего еÑ. ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ÐаÑианÑSECURITY DEFINER(безопаÑноÑÑÑ Ð¾Ð¿ÑеделивÑего) обознаÑаеÑ, ÑÑо пÑоÑедÑÑа вÑполнÑеÑÑÑ Ñ Ð¿Ñавами полÑзоваÑелÑ, владеÑÑего ей.ÐлÑÑевое Ñлово
EXTERNAL(внеÑнÑÑ) допÑÑкаеÑÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL, но ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм, Ñак как, в оÑлиÑие Ð¾Ñ SQL, ÑÑа Ñ Ð°ÑакÑеÑиÑÑика ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° вÑе пÑоÑедÑÑÑ, а не ÑолÑко внеÑние.РпÑоÑедÑÑе Ñ Ñ Ð°ÑакÑеÑиÑÑикой
SECURITY DEFINERне могÑÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми (напÑимеÑ,COMMITиROLLBACKв некоÑоÑÑÑ ÑзÑÐºÐ°Ñ ).паÑамеÑÑ_конÑигÑÑаÑиизнаÑениеÐÑедложение
SETопÑеделÑеÑ, ÑÑо пÑи вÑзове пÑоÑедÑÑÑ ÑказаннÑй паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии должен пÑинÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение, а заÑем воÑÑÑановиÑÑ ÑÐ²Ð¾Ñ Ð¿ÑедÑдÑÑее знаÑение пÑи завеÑÑении пÑоÑедÑÑÑ. ÐÑедложениеSET FROM CURRENTÑÐ¾Ñ ÑанÑÐµÑ Ð² каÑеÑÑве знаÑениÑ, коÑоÑое бÑÐ´ÐµÑ Ð¿Ñименено пÑи Ð²Ñ Ð¾Ð´Ðµ в пÑоÑедÑÑÑ, знаÑение, дейÑÑвÑÑÑее в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑполнениÑCREATE PROCEDURE.ÐÑли в опÑеделение пÑоÑедÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾
SET, Ñо дейÑÑвие командÑSET LOCAL, вÑполнÑемой внÑÑÑи пÑоÑедÑÑÑ Ð´Ð»Ñ Ñого же паÑамеÑÑа, огÑаниÑиваеÑÑÑ Ñелом пÑоÑедÑÑÑ: пÑедÑдÑÑее знаÑение паÑамеÑÑа Ñак же бÑÐ´ÐµÑ Ð²Ð¾ÑÑÑановлено пÑи завеÑÑении пÑоÑедÑÑÑ. Ðднако обÑÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°SET(безLOCAL) пеÑеопÑеделÑÐµÑ Ð¿ÑедложениеSET, как и пÑедÑдÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑSET LOCAL: дейÑÑвие Ñакой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð±ÑÐ´ÐµÑ ÑÐ¾Ñ Ñанено и поÑле завеÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ, еÑли ÑолÑко не пÑоизойдÑÑ Ð¾ÑÐºÐ°Ñ ÑÑанзакÑии.ÐÑли к опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾
SET, Ñо в ÑÑой пÑоÑедÑÑе не могÑÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми (напÑимеÑ,COMMITиROLLBACKв некоÑоÑÑÑ ÑзÑÐºÐ°Ñ ).Ðа подÑобнÑми ÑведениÑми об Ð¸Ð¼ÐµÐ½Ð°Ñ Ð¸ знаÑениÑÑ Ð¿Ð°ÑамеÑÑов обÑаÑиÑеÑÑ Ðº SET и Ðлаве 19.
опÑеделениеСÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа, опÑеделÑÑÑÐ°Ñ ÑеализаÑÐ¸Ñ Ð¿ÑоÑедÑÑÑ; ÐµÑ Ð·Ð½Ð°Ñение завиÑÐ¸Ñ Ð¾Ñ ÑзÑка. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð¼Ñ Ð²Ð½ÑÑÑенней пÑоÑедÑÑÑ, пÑÑÑ Ðº обÑекÑÐ½Ð¾Ð¼Ñ ÑайлÑ, команда SQL или код на пÑоÑедÑÑном ÑзÑке.
ЧаÑÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ заклÑÑаÑÑ Ð¾Ð¿Ñеделение пÑоÑедÑÑÑ Ð² доллаÑÑ (Ñм. ÐодÑаздел 4.1.2.4), а не в ÑÑадиÑионнÑе апоÑÑÑоÑÑ. ÐÑли не иÑполÑзоваÑÑ Ð´Ð¾Ð»Ð»Ð°ÑÑ, вÑе апоÑÑÑоÑÑ Ð¸ обÑаÑнÑе коÑÑе ÑеÑÑÑ Ð² опÑеделении пÑоÑедÑÑÑ Ð¿ÑидÑÑÑÑ ÑкÑаниÑоваÑÑ, дÑблиÑÑÑ Ð¸Ñ .
обÑекÑнÑй_Ñайл,обÑекÑнÑй_ÑимволÐÑа ÑоÑма пÑедложениÑ
ASпÑименÑеÑÑÑ Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки загÑÑжаемÑÑ Ð¿ÑоÑедÑÑ Ð½Ð° ÑзÑке C, когда Ð¸Ð¼Ñ Ð¿ÑоÑедÑÑÑ Ð² коде C не ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пÑоÑедÑÑÑ Ð² SQL. СÑÑокаобÑекÑнÑй_ÑайлзадаÑÑ Ð¸Ð¼Ñ Ñайла, ÑодеÑжаÑего ÑкомпилиÑованнÑÑ Ð¿ÑоÑедÑÑÑ Ð½Ð° C (Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑ ÑÑÑÐ¾ÐºÑ Ñак же, как иLOAD). СÑÑокаобÑекÑнÑй_ÑимволзадаÑÑ Ñимвол Ñкомпонованной пÑоÑедÑÑÑ, Ñо еÑÑÑ Ð¸Ð¼Ñ Ð¿ÑоÑедÑÑÑ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ коде на ÑзÑке C. ÐÑли обÑекÑнÑй Ñимвол не Ñказан, пÑедполагаеÑÑÑ, ÑÑо он ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ опÑеделÑемой SQL-пÑоÑедÑÑÑ.ÐÑли повÑоÑнÑе вÑзовÑ
CREATE PROCEDUREÑÑÑлаÑÑÑÑ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ обÑекÑнÑй Ñайл, он загÑÑжаеÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑеанÑа ÑолÑко один Ñаз. ЧÑÐ¾Ð±Ñ Ð²ÑгÑÑзиÑÑ Ð¸ загÑÑзиÑÑ ÑÑÐ¾Ñ Ñайл Ñнова (напÑимеÑ, в пÑоÑеÑÑе ÑазÑабоÑки), наÑниÑе новÑй ÑеанÑ.Ñело_sqlТело пÑоÑедÑÑÑ Ð² ÑÑиле
LANGUAGE SQL. ÐÑо должен бÑÑÑ Ð±Ð»Ð¾Ðº видаBEGIN ATOMIC
опеÑаÑоÑ;опеÑаÑоÑ; ...опеÑаÑоÑ; ENDÐно опÑеделÑеÑÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ ÑелÑ, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ð¾Ð¼Ñ ÑÑÑоковой конÑÑанÑой (Ñм.
опÑеделениевÑÑе), но еÑÑÑ Ð¸ некоÑоÑÑе ÑазлиÑиÑ. ÐÑа ÑоÑма ÑабоÑÐ°ÐµÑ ÑолÑко Ñ ÑÑнкÑиÑми в ÑÑилеLANGUAGE SQL, Ñогда как ÑоÑма Ñо ÑÑÑоковой конÑÑанÑой поддеÑживаеÑÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ ÑзÑков. Ðна ÑазбиÑаеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ, Ñогда как ÑоÑма Ñо ÑÑÑоковой конÑÑанÑой â во вÑÐµÐ¼Ñ Ð²ÑполнениÑ; как ÑледÑÑвие, ÑÑа ÑоÑма не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»Ð¸Ð¼Ð¾ÑÑнÑе ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов и дÑÑгие конÑÑÑÑкÑии, коÑоÑÑе нелÑÐ·Ñ Ð¾Ð±ÑабоÑаÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ. С данной ÑоÑмой оÑÑлеживаÑÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи пÑоÑедÑÑÑ Ð¾Ñ Ð¾Ð±ÑекÑов, иÑполÑзÑемÑÑ Ð² ÐµÑ Ñеле, Ñак ÑÑо командаDROP ... CASCADEвÑполниÑÑÑ ÐºÐ¾ÑÑекÑно, Ñогда как в ÑлÑÑае опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñела в ÑÑÑоковой конÑÑанÑе поÑле Ñакого ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÐ¿Ð¾Ð»Ð½Ð¾ÑеннÑе пÑоÑедÑÑÑ. ÐаконеÑ, Ð´Ð°Ð½Ð½Ð°Ñ ÑоÑма в болÑÑей ÑÑепени ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL и ÑовмеÑÑима Ñ Ð´ÑÑгими ÑеализаÑиÑми SQL.
ÐÑимеÑаниÑ
ÐополниÑелÑнÑе деÑали ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑнкÑий, коÑоÑÑе пÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ Ð¸ к пÑоÑедÑÑам, опиÑÑваÑÑÑÑ Ð² CREATE FUNCTION.
ЧÑÐ¾Ð±Ñ Ð²ÑполниÑÑ Ð¿ÑоÑедÑÑÑ, воÑполÑзÑйÑеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ CALL.
ÐÑимеÑÑ
CREATE PROCEDURE insert_data(a integer, b integer) LANGUAGE SQL AS $$ INSERT INTO tbl VALUES (a); INSERT INTO tbl VALUES (b); $$;
или
CREATE PROCEDURE insert_data(a integer, b integer) LANGUAGE SQL BEGIN ATOMIC INSERT INTO tbl VALUES (a); INSERT INTO tbl VALUES (b); END;
и пÑÐ¸Ð¼ÐµÑ Ð²Ñзова:
CALL insert_data(1, 2);
СовмеÑÑимоÑÑÑ
Ðоманда CREATE FUNCTION опÑеделена в ÑÑандаÑÑе SQL. ÐÑ ÑеализаÑÐ¸Ñ Ð² PostgreSQL Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑовмеÑÑимÑм обÑазом, но дополнена множеÑÑвом ÑаÑÑиÑений. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ñакже к CREATE FUNCTION.