[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-sql-chto-takoe-khranimaya-protsedura":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},865,"chto-takoe-khranimaya-protsedura",25,"sql","SQL","🗃️","Что такое хранимая процедура?","Хранимая процедура — именованный набор SQL-инструкций, который хранится и выполняется на сервере БД. Процедуры поддерживают входные и выходные параметры, локальные переменные, условные конструкции, циклы и могут выполнять как DDL, так и DML операции.\n\n> **Аналогия из жизни:** хранимая процедура — как рецепт блюда, записанный на кухне ресторана. Вместо того чтобы каждый раз описывать все шаги приготовления, официант просто говорит «сделай борщ» — и повар выполняет заранее известную последовательность действий.\n\n### Преимущества\n\n- Производительность — при первом вызове процедура компилируется (синтаксический анализ + план выполнения), последующие вызовы выполняются быстрее\n- Снижение сетевого трафика — вместо серии SQL-запросов клиент отправляет один вызов процедуры\n- Переиспользование логики — одна процедура может вызываться из разных приложений\n- Безопасность — можно дать пользователю право выполнять процедуру, но не прямой доступ к таблицам\n\n### Пример (PostgreSQL)\n\n\u003Cdetails>\u003Csummary>Пример хранимой процедуры\u003C\u002Fsummary>\n\n```sql\nCREATE OR REPLACE PROCEDURE transfer_funds(\n    sender_id INT,\n    receiver_id INT,\n    amount DECIMAL\n)\nLANGUAGE plpgsql\nAS $$\nBEGIN\n    -- Списание со счёта отправителя\n    UPDATE accounts SET balance = balance - amount\n    WHERE id = sender_id;\n\n    -- Зачисление на счёт получателя\n    UPDATE accounts SET balance = balance + amount\n    WHERE id = receiver_id;\n\n    -- Проверка баланса\n    IF (SELECT balance FROM accounts WHERE id = sender_id) \u003C 0 THEN\n        RAISE EXCEPTION 'Insufficient funds';\n    END IF;\n\n    COMMIT;\nEND;\n$$;\n\n-- Вызов\nCALL transfer_funds(1, 2, 1000.00);\n```\n\n\u003C\u002Fdetails>\n\n### Процедура vs Функция\n\nВ PostgreSQL процедуры (с `CALL`) и функции (с `SELECT`) — разные объекты. Процедура может управлять транзакциями (`COMMIT`\u002F`ROLLBACK`), а функция — нет. Функция обязана возвращать значение, процедура — необязательно.\n\n> **На собеседовании:** объясните, что хранимая процедура компилируется один раз и выполняется на сервере, упомяните преимущества. Частая ошибка — путать хранимые процедуры и функции, не знать разницу в управлении транзакциями.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое хранимая процедура? — Gymterview","Хранимая процедура — именованный набор SQL-инструкций, который хранится и выполняется на сервере БД. Процедуры поддерживают входные и выходные параметры, локаль","Хранимая процедура — именованный набор SQL-инструкций, который хранится и выполняется на сервере БД. Процедуры поддержив",[7,13],"Хранимая процедура — именованный набор SQL-инструкций, который хранится и выполняется на сервере БД. Процедуры поддерживают входные и выходные параметры, локальные переменные, условные конструкции, циклы и могут выполнять как DDL, так и DML операции.",true]