dil: (Default)
dil ([personal profile] dil) wrote2005-09-30 11:49 am

Знатокам баз данных

Под катом приводится кусочек [не работающего из-за перекрытия имён] кода на оракловом PL/SQL, автоматически сгенерированного оракловым же Migration workbench'ем из микрософтовского T-SQL.
Задача: попробуйте осознать, что за фигня здесь написана, и восстановить исходный код :).

StoO_selcnt := 0;
SELECT 1 INTO StoO_selcnt
FROM DUAL
WHERE  ( 'Location' = ( 
			SELECT  type_ 
				 FROM SomeTable  
				WHERE id = ID 		 ));
END;
IF StoO_selcnt != 0 THEN
BEGIN
	FullPath := FullPath || separator;
END;
END IF;

[identity profile] alexkuklin.livejournal.com 2005-09-30 11:29 am (UTC)(link)
ну и работу ты себе нашел :)

[identity profile] dil.livejournal.com 2005-09-30 11:34 am (UTC)(link)
У меня-то задача была другая - перетащить код из MSSQL в оракл. Но этот migration workbench там такого наворотил, что теперь приходится сличать две версии и руками исправлять :)

[identity profile] dma.livejournal.com 2005-09-30 11:50 am (UTC)(link)
select from dual where? Да они там молодцы :)))

Это функция, которая строит полный путь по вложенным категориям, да?

[identity profile] dil.livejournal.com 2005-09-30 12:09 pm (UTC)(link)
Это в смысле "Да вы тут ВСЕ МОЛОДЦЫ!" ? Ну да, есть такое :)
Не угадал, оно ещё проще..

[identity profile] dma.livejournal.com 2005-09-30 12:13 pm (UTC)(link)
..which reminds me. Славная шутка над ораклистами - втихаря сказать delete from dual :))
или insert into dual values('y')

[identity profile] dil.livejournal.com 2005-09-30 12:19 pm (UTC)(link)
Злой ты..

А оригнал выглядел так:
if ( (select type_ from SomeTable where id = @ID) = 'Location')
Begin
  SET  @FullPath =  @FullPath + @separator
end

В смысле, если запись имеет тип 'Location', то подписать в конце маршрута разделитель. Всё.

Я долго фтыкал, чтО это за код, пока не посмотрел в оригинал.

[identity profile] ennor.livejournal.com 2005-09-30 01:45 pm (UTC)(link)
Ну, что посадили, то и выросло.

Код на транзакте явно писан бывшим (а то и нынешним) сишником. Ибо мышление - его не спрячешь. Условие по-хорошему должно быть написано так:



Ну а машинный перевод еще долго будет оставлять желать лучшего, и это еще мягко выражаясь...