DO
DO â вÑполниÑÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñй блок кода
СинÑакÑиÑ
DO [ LANGUAGEимÑ_ÑзÑка]код
ÐпиÑание
DO вÑполнÑÐµÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñй блок кода или, дÑÑгими Ñловами, ÑазовÑÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½ÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° пÑоÑедÑÑном ÑзÑке.
Ðлок кода воÑпÑинимаеÑÑÑ, как еÑли Ð±Ñ ÑÑо бÑло Ñело ÑÑнкÑии, коÑоÑÐ°Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ð°ÑамеÑÑов и возвÑаÑÐ°ÐµÑ void. ÐÑÐ¾Ñ ÐºÐ¾Ð´ ÑазбиÑаеÑÑÑ Ð¸ вÑполнÑеÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз.
ÐеобÑзаÑелÑное пÑедложение LANGUAGE можно запиÑаÑÑ Ð´Ð¾ или поÑле блока кода.
ÐаÑамеÑÑÑ
кодÐÑполнÑемÑй код на пÑоÑедÑÑном ÑзÑке. Ðн должен задаваÑÑÑÑ Ð² виде ÑекÑÑовой ÑÑÑоки (ÐµÑ ÑекомендÑеÑÑÑ Ð·Ð°ÐºÐ»ÑÑаÑÑ Ð² доллаÑÑ), как и код в
CREATE FUNCTION.имÑ_ÑзÑкаÐÐ¼Ñ Ð¿ÑоÑедÑÑного ÑзÑка, на коÑоÑом напиÑан код. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ
plpgsql.
ÐÑимеÑаниÑ
ÐÑименÑемÑй пÑоÑедÑÑнÑй ÑзÑк должен бÑÑÑ Ñже заÑегиÑÑÑиÑован в ÑекÑÑей базе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE EXTENSION. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°ÑегиÑÑÑиÑован ÑолÑко plpgsql, но не дÑÑгие ÑзÑки.
ÐолÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ пÑоÑедÑÑного ÑзÑка, либо бÑÑÑ ÑÑпеÑполÑзоваÑелем, еÑли ÑÑÐ¾Ñ ÑзÑк недовеÑеннÑй. Такие же ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвÑÑÑ Ð¸ пÑи Ñоздании ÑÑнкÑии на ÑÑом ÑзÑке.
ÐÑли команда DO иÑполнÑеÑÑÑ Ð² блоке ÑÑанзакÑии, код пÑоÑедÑÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми. Такие опеÑаÑоÑÑ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ, ÑолÑко еÑли DO вÑполнÑеÑÑÑ Ð² оÑделÑной ÑÑанзакÑии.
ÐÑимеÑÑ
СледÑÑÑий код даÑÑ Ð²Ñе пÑава Ð´Ð»Ñ Ð²ÑеÑ
пÑедÑÑавлений в ÑÑ
еме public Ñоли webuser:
DO $$DECLARE r record;
BEGIN
FOR r IN SELECT table_schema, table_name FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public'
LOOP
EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
END LOOP;
END$$;СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ DO оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.