Как возвращать значения из хранимой процедуры MySQL?

Начал изучать MySQL после 20 лет работы с SQL Server. 95% моих запросов к базе - вызовы хранимых процедур, о которых в SQL Server я знаю чуть более чем всё. 20 лет практики и успешной реализации многих проектов на SQL Server убедили меня в том, что в использовании хранимых процедур всё-таки больше достоинств чем недостатков.

Однако многие конструкции в MySQL кажутся мне не очень удобными и не практичными. Разумеется, это моё субъективное восприятие. Кроме того, я изучаю синтаксис MySQL всего лишь пару недель, поэтому прошу не критиковать меня за реплику выше. Сравнение получилось вынужденным и необъективным.

Мой вопрос заключается в том, что я не могу найти в MySQL аналога очень удобного кода на Transact-SQL:

create procedure my_stored_proc
  @p1 varchar(15),
  @p2 char10
as

set nocount on

declare @id int

select @id = some_id from some_table
where (some_val1 = @p1) or (some_val2 = @p2)
--я точно знаю, что после запроса выше @id будет инициализирован

select @id as 'Identifier'
--значение @id просто возьмёт и вернётся в вызывающий код

Пожалуйста, обратите внимание на то, что я в теле процедуры объявляю переменную, затем инициализирую её и хочу вернуть её значение под алиасом.

Как мне реализовать подобное на MySQL? Я испробовал всё что нашел на просторах Сети - играл с параметрами (in/out/inout), явно подставлял значения, и проч. Но хранимая процедура всегда возвращает NULL.

UPDATE

Как это обычно бывает, я разобрался самостоятельно только лишь после того, как чётко формализовал проблему в виде вопроса. Вот моё решение:

set @id = 0;

select @id = some_id from some_table
where (some_val1 = @p1) or (some_val2 = @p2)

select @id as 'Identifier';

То есть declare вообще не для объявления локальной переменной, да? Я просто беру переменную (без явного объявления) и инициализирую её нулём, робко надеясь, что MySQL поймёт что переменная будет типа int. Вопрос: а если мне нужен будет bigint? Как MySQL решает какого типа должна быть инициализируемая переменная?

Ну и с возвратом значения тоже все понятно. Синтаксис ничем не отличается от Transact-SQL.

Я буду признателен за более изящные решения (если они есть).


Ответы (0 шт):