Как написать процедуру, которая вернет значение после выполнения?

Как получить доступ к результатам работы хранящихся процедур SQL?
  • 19 января 2024 г. 8:18
Ответы на вопрос 4
Процедуры в SQL обычно не возвращают значения так же, как функции в других языках программирования. Однако, в хранимых процедурах можно определить выходные параметры (OUT parameters), которые могут быть использованы для возвращения значений из процедуры. Вы также можете использовать хранимые процедуры для изменений в базе данных и извлечения результатов выборки с помощью курсоров или прямых select-запросов.

### Синтаксис для создания хранимой процедуры с выходным параметром в SQL:

В зависимости от используемой системы управления базами данных (СУБД), синтаксис может незначительно отличаться.

```sql
-- Синтаксис для MySQL
DELIMITER $$

CREATE PROCEDURE GetEmployeeSalary(IN employee_id INT, OUT employee_salary DECIMAL)
BEGIN
    SELECT salary INTO employee_salary FROM employees WHERE id = employee_id;
END$$

DELIMITER ;
```

```sql
-- Синтаксис для SQL Server
CREATE PROCEDURE GetEmployeeSalary 
    @employee_id INT, 
    @employee_salary DECIMAL OUTPUT
AS
BEGIN
    SELECT @employee_salary = salary FROM employees WHERE id = @employee_id;
END
```

### Как вызвать хранимую процедуру и получить результат:

Для MySQL:

```sql
CALL GetEmployeeSalary(123, @out_salary);
SELECT @out_salary;
```

Для SQL Server:

```sql
DECLARE @out_salary DECIMAL;
EXEC GetEmployeeSalary @employee_id = 123, @employee_salary = @out_salary OUTPUT;
SELECT @out_salary;
```

Переменная `@out_salary` будет содержать значение `salary` выбранное из таблицы `employees` для указанного `employee_id`.

### Получение результатов работы процедур:

1. Процедуры могут возвращать результаты выборки напрямую в клиент:

```sql
CREATE PROCEDURE SelectAllEmployees()
AS
BEGIN
    SELECT * FROM employees;
END
```

При вызове данной процедуры `CALL SelectAllEmployees()` будут возвращены все записи из таблицы `employees`.

2. Если процедура предназначена для модификации данных и вы хотите получить результаты этих изменений, вам придется взаимодействовать с базой данных для проверки изменений. Например, после добавления записи в таблицу, вы можете выполнить `SELECT` с конкретными условиями для проверки результатов.

Важно отметить, что примеры и синтаксис могут отличаться в зависимости от конкретной СУБД (MySQL, PostgreSQL, Oracle, SQL Server и т.д.), поэтому рекомендуется ознакомиться с документацией, специфичной для вашей системы.
если речь именно про процедуры, то никак, т.к. они по определению ничего не возвращают 
если про функции, то https://www.postgresql.org/docs/current/sql-create... или дока про соответствующий язык
Процедуры, в отличие от функций, не возвращают значение; поэтому в CREATE PROCEDURE отсутствует предложение RETURNS. Однако процедуры могут выдавать данные в вызывающий код через выходные параметры.

https://postgrespro.ru/docs/postgresql/16/xproc (имеются в виду SQL-процедуры)

Для возврата значений из PL/pgSQL процедуры используются OUT и INOUT параметры.

https://postgrespro.ru/docs/postgresql/16/plpgsql-... (пример имеется)
Вам нужно начать с туториала и примеров, а не с тупых статей в интернете и собственных догадок. 
Просто возьмите учебник и потратьте некоторое время на изучение самых базовых основ. Если вам лень этим заниматься. то почему вы думаете, что людям тут будет не лень сочинять вам индивидуальные экспресс-курсы по изучению основ баз данных?
Похожие вопросы