powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Процедура "Есть ли такое уже"
5 сообщений из 5, страница 1 из 1
Процедура "Есть ли такое уже"
    #39896897
Есть таблица:
FIO
id (int autoincrement ключевое поле)
naim (varchar(100))
del (int(1)) - индикатор удаления (0 - НЕ удалён, 1 - удалён)

Проблема:
передать в процедуру ФИО человека и назад получить id и, если "удалён" - восстановить.

Состояний - три: "нет", "есть и del = 0" и "есть, но del =1"

Т.е. -
Код: plsql
1.
Call ('иванов иван иванович', rez);


Результат: id записи, но если del = 1, тогда del = 0

Есть ли возможность организации такой процедуры одной строкой?
Если нет - то вообще как? :)
...
Рейтинг: 0 / 0
Процедура "Есть ли такое уже"
    #39896908
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сильно понятно.

Допустим, выполняем
Код: sql
1.
Call ('иванов иван иванович', rez);



Вопрос 1. Что передаётся в rez?

Вопрос 2. Что происходит (что выводится? что возвращается в rez? какие ещё действия выполняются?) в вариантах:

Вариант 1. 'иванов иван иванович' - отсутствует в таблице.

Вариант 2. 'иванов иван иванович' - имеется в таблице, и его del=0.

Вариант 2. 'иванов иван иванович' - имеется в таблице, и его del=1.
...
Рейтинг: 0 / 0
Процедура "Есть ли такое уже"
    #39896915
Akina, rez - это возвращаемый id записи.

Передаем процедуре "Иванов Иван Иванович".

Если в таблице FIO такой записи нет - тогда добавляем и возвращаем id записи.

Если в таблице FIO такая запись есть, но у неё del = 1 (т.е. "флажок" удаления поднят) - тогда меняем на del = 0 и возвращаем id записи.

Если в таблице FIO такая запись есть и у неё del = 0 (т.е. "флажок" удаления опущен) - тогда просто возвращаем id записи.
...
Рейтинг: 0 / 0
Процедура "Есть ли такое уже"
    #39896925
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну будет нечто вроде
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE GetID ( IN fio VARCHAR(100), OUT id BIGINT )
BEGIN
INSERT INTO FIO (naim) 
VALUES (fio)
ON DUPLICATE KEY UPDATE
SET FIO.del = 0;
SET id = ( SELECT FIO.id
           FROM FIO
           WHERE FIO.naim = fio );
END;


Само собой предполагается наличие уникального индекса по FIO (naim) .
...
Рейтинг: 0 / 0
Процедура "Есть ли такое уже"
    #39897133
Akina, вооооот такое спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Процедура "Есть ли такое уже"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]