Как возвращать значения из хранимой процедуры 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.
Я буду признателен за более изящные решения (если они есть).