Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2016, 22:59   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
select @OUT_ID = @@IDENTITY;
set здесь почему не подошел? И зачем возвращать набор данных для одной строки и одного поля? Попробуй out параметр и в нем ид верни. Да и come-on совсем от хранимок не отговаривает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.06.2016, 23:41   #12
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Ну, лады, пусть будет "маразм". Давай так: Есть задача, чисто для спортивного интересу - поглядеть, у кого геммороя больше будет: у маразматика или у козырного камона:

Есть КЛ (таблица CF), у него есть ID, PREV_ID (предыдущий ID - для истории изменений), ФИО (FULLNAME), должость (POS_ID) и ID юзера, внесшего изменения (MOPER_ID). ID - автоинкремент (сука, за это MSSQL и не люблю), ФИО - varchar, должность - bigint, ID юзера - bigint.

Есть таблица должностей (LST_POS) - ID, наименование (CAPTION). ID пользователя, внесшего запись (MOPER_ID).

Есть, ну, положим, заявки, которые оставляло это КЛ: CUSTS(ID bigint autoinc, PREV_ID bigint, CF_ID bigint, EXECUTED int);

Есть задача - получить ID измененного КЛ. Напиши без ХП, короче и понятнее.
И учитывай - я, по твоим словам, маразматик. Ты уж пожалей старика, поясни - что да как. Общими фразами RTFM я и сам отделываться умею - ну, это все маразматики так делают - это их отличительный признак. Особенно, когда крыть нечем.

=============

ХП:

Код:
create or replace procedure CF_IU(@ID bigint, @FULLNAME varchar (256), @POSITION varchar(256), @MOPER_ID bigint)
as
declare @OUT_ID bigint;
declare @POS_ID bigint;
begin
  if exists(select ID from LST_POS where CAPTION = @POSITION)
    select @POS_ID = ID from LST_POS where CAPTION = @POSITION; -- могу ошибаться в синтаксисе, по памяти
  else begin
    insert into LST_POS(CAPTION, MOPER_ID)values(@POSITION, @MOPER_ID);
    select @POS_ID = @@IDENTITY;
  end
  
  if exists(select ID from CF where ID = @ID) begin
    insert into CF(PREV_ID, FULLNAME, POS_ID, MOPER_ID) values (@ID, @FULLNAME, @POS_ID, @MOPER_ID);
    select @OUT_ID = @@IDENTITY;
    update CUSTS set CF_ID = @OUT_ID where CF_ID = @ID and not ID in (select is_null(PREV_ID from CUSTS));
  end else begin
    insert into CF(PREV_ID, FULLNAME, POS_ID, MOPER_ID) values (null, @FULLNAME, @POS_ID, @MOPER_ID);
    select @OUT_ID = @@IDENTITY;
  end

  select @OUT_ID as ID;
end

Запрос:

exec CF_IU @ID = ?, @FULLNAME = ?, @FULLNAME = ?, @POSITION = ?, @MOPER_ID = ?;
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 22.06.2016, 23:45   #13
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Напиши без ХП, короче и понятнее.
Вы по русски плохо понимаете? В какой строке моих сообщений написано нафик хп?
Мало того вам Аватар тоже сказал
Цитата:
Да и come-on совсем от хранимок не отговаривает
может пора вникать в то что пишут?
come-on вне форума Ответить с цитированием
Старый 22.06.2016, 23:45   #14
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
set здесь почему не подошел? И зачем возвращать набор данных для одной строки и одного поля? Попробуй out параметр и в нем ид верни. Да и come-on совсем от хранимок не отговаривает
Да подойдёт, конечно. Но это ж я привёл частный случай.

А ну, как там больше движухи делать нада? Вон, только что пример отправил.
Хочется именно работы с хранимками в целом, а не разъяснения конктретного случая - конкретный случай я и сам победить умею

Да и в коде писать запросы вида insert into/update гораздо стрёмнее, чем банальную хранимку вызвать.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 22.06.2016, 23:48   #15
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

все что я сказал что вот это всё
Цитата:
if exists(select * from "CF" where ID = @ID) begin
update CF set
EXECUTORS_ID = @EXECUTORS_ID,
CUSTOMERS_ID = @CUSTOMERS_ID,
"CAPTION" = @CAPTION,
POST = @POST,
PHONE = @PHONE,
EMAIL = @EMAIL,
DELST = @DELST
where ID = @ID;
set @OUT_ID = @ID;
end else begin
insert into CF (
EXECUTORS_ID,
CUSTOMERS_ID,
CAPTION,
POST,
PHONE,
EMAIL,
DELST
)values(
@EXECUTORS_ID,
@CUSTOMERS_ID,
@CAPTION,
@POST,
@PHONE,
@EMAIL,
@DELST
);
select @OUT_ID = @@IDENTITY;
end;

commit transaction;
select @OUT_ID as ID;
заменяется одним мержем, а куда вы его впихнете в хп или еще куда, ваше личное горе
come-on вне форума Ответить с цитированием
Старый 22.06.2016, 23:51   #16
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Вы по русски плохо понимаете? В какой строке моих сообщений написано нафик хп?
Мало того вам Аватар тоже сказал

может пора вникать в то что пишут?
Извиняй, в твоих сообщениях явно прослеживается именно это: "на фиг тебе вот эта конструкция с ХП, юзай мерж, юзай идентити и будет тебе счастье". Возможно, ты и не поверишь, но некоторые посетители данного форума тоже в курсе этой магии. Но в вопросе эти странные люди указали (вот, к примеру, в моём лице), именно то, что им требуется.

Наверное, это потому, что так надо, а не потому, что у этих людей внезапно наступил маразм?
И даже по-русски они понимают, эти странные люди.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 22.06.2016, 23:54   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Та нормально все с хранимками. Хоть твоим способом, хоть с использованием возможностей современных версий сиквела. Там другая проблема
Цитата:
Из SQL Manager выполняется прекрасно, а вот из php - выдает ошибку - "тип курсора изменен".
Это говорит о том, что проблема на стороне клиента. Смотри настройки соединения. Как правильно для php и его средств не скажу, не дружу. Вся беда скорее всего в возвращаем наборе данных, он и есть тот курсор. Или правильно настрой, или возвращай в output параметре
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.06.2016, 23:56   #18
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
все что я сказал что вот это всё
заменяется одним мержем, а куда вы его впихнете в хп или еще куда, ваше личное горе
Во-первых, со мной можно на "ты".
Во-вторых, приведенный в первом посте пример - это не то, чтобы я просил за меня задачу для третьего курса решить - "дайте мне пример".
Меня больше интересует - почему odbc так косячит с курсорами.

Этот пример я привел как самый простой, чтобы не было ненужных вопросов.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 22.06.2016, 23:59   #19
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Наверное, это потому
что читать надо что пишут, а не выдумывать, все просто. Вам предложил переписать код tsql, ни про кание пхп и речи не заводил, ваши домыслы только ваши. ))

Цитата:
Меня больше интересует - почему odbc так косячит с курсорами.
при чем тут одбси ? я не вникал, но здается что это кривое пхп)
come-on вне форума Ответить с цитированием
Старый 23.06.2016, 00:01   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Парни, разобрались уже. Хватит отношения выяснять. Обоим выпишу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
apache php mssql глючит! frox Софт 1 22.11.2011 16:53
PHP 5.3.3 + MSSQL 2008 DimaKGD PHP 2 10.03.2011 14:25
MSSQL + PHP: Проблема подключения Arnezami PHP 20 17.02.2010 15:53
Как узнать изменен ли текст в RichEdit? unicode Общие вопросы Delphi 7 13.07.2009 16:40
Как узнать когда был изменен (создан) интерфейс версии IPv6. Crazyman Работа с сетью в Delphi 0 15.12.2008 00:51