|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Очень глупый вопрос о Хранимых процедурах
Пытаюсь понять и разобраться в этом вопросе и мне не понятен 1 момент.
Правильно ли я понимаю, что хранимые процедуры зарание никак не описать на сервере и чтобы их вызвать мы должны в наш Sql Запрос пихать полное их описание, потом использовать TFDStoredProc? Если так, то это нужно делать после каждого отключения от сервера? Понимаю, что вопрос крайне простой, но такая логика кажется мне странной Либо, если мы их не дропаем - то мы их описали и можем просто вызвать из делфи? Последний раз редактировалось nixon232, 15.06.2018 в 12:12. |
#2
|
|||
|
|||
Грубо говоря, ответ :
Цитата:
|
#3
|
|||
|
|||
Сам спросил, сам ответил
Да, собственно, хранимая процедура это и есть код, который хранится и выполняется в БД. Условно говоря, один раз создали (обычно не из программы, а при создании БД), потом вызываем любое кол-во раз. Соответственно, код процедуры должен быть нейтральным к данным, т.е. у тебя обычно нет возможности менять его для каждого вызова. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
nixon232 (16.06.2018)
|
#4
|
|||
|
|||
Да, на первый вопрос удалось найти ответ самому. Если можно я еще "потуплю" на тему еще тк. гугл как-то не помогает с этим.
1 можно ли вирнуть функцией не одно значение а нейкий "результат запроса"? (думаю, что нет, уверености нет) 2. можно в конце процедуры "вернуть" набор переменных? без учета out. то есть что--типа Код:
BEGIN DECLARE pid int; DECLARE pMSG int DEFAULT -1; set pid =2; set pMSG =3 SELECT pid, pmsg; END// |
#5
|
|||
|
|||
1. Да, можно. Тогда процедура должны возвращать либо курсор, либо датасет (зависит от сервера), а на клиенте надо делать что-то типа
Код:
select * from stored_proc_name(:param,...) |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
nixon232 (16.06.2018)
|
#6
|
|||
|
|||
Пытаюсь создать простенькую тестовую ф-ю и упорно не компилирует
Код:
DELIMITER // CREATE FUNCTION IsUser (IN UserName VARCHAR (50)) RETURNS INTEGER BEGIN DECLARE RetVal INTEGER; SELECT id INTO RetVal FROM table WHERE user=UserName; RETURN IFNULL(RetVal, 0); END // DELIMITER ; Цитата:
Mysql Последний раз редактировалось nixon232, 16.06.2018 в 10:43. |