Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > "Стандарт" для хранимой процедуры


Автор: namervasek 6.7.2012, 13:41
Есть много баз данных с разной архитектурой и разными серверами для хранения(Sql server, Oracle, Firebird и тд) 
Но во всех базах должна находится хранимая процедура которая имеет один стандрат.
Процедура должна возращать пять переменых при вызове... Две переменые целочисленые, две текстовые и последняя это время.
С целочислеными перемеными проблем нет (на всех серверах целочисленые типы примерно одинаковые)
А вот с датой и с текстом проблемы... В каждом сервере свои форматы и в каждом по разному все хранится.
Как возможное решение этой проблемы я решил, что строки и даты должны передаваться в виде массива байт.... 
И вот волнует правильное ли решения я выбрал.. может можно как то подрогуму? Подскажите пожалуста
 




Автор: Frees 6.7.2012, 14:00
А почему нельзя в каждой СУБД хранить дату и текст так как принято в этой СУБД?

Автор: namervasek 6.7.2012, 14:38
Мне не нужно делать реализацию этой процедуры, реализовывать будут другие... Мне не обходимо описать стандарт по которому они будут реализовавать эту процедуру.. При чем стандарт должен быть на все сервера.

Для ясности приведу пример:

Вот пример стандарта
Код

Процедура: ААА
Возращаемое значение: Byte(это паскалевский байт без знака)


В sql server:
  Разработчик этот стандарт прочитает и напишет в своей базе процедуру ААА которая вернет tinyint(это в sql server тоже самое, что Byte в паскале)
В MySQL:
  Типа Byte без знака вообще нет(я точно не уверен может он там и есть, но для примера пусть его там не будет)... И получается что разработчик уже не сможет реализовать стандарт




То есть в стандарте мне нужно указать такой тип который есть во всех серверах... Но если с целым числом это не проблема, то со строками и датами это довольно затруднительно.

Автор: Frees 6.7.2012, 14:51
А не проще будет использовать потом использовать библиотеку доступа которая в клиентском приложении умеет работать сто всеми СУБД и приводить их в один вид для работы. ADO например.

Цитата(namervasek @  6.7.2012,  16:41 Найти цитируемый пост)
И вот волнует правильное ли решения я выбрал.. может можно как то подрогуму?

Определенно не правильное простое решение! 

Автор: namervasek 6.7.2012, 15:11
Цитата

А не проще будет использовать потом использовать библиотеку доступа которая в клиентском приложении умеет работать сто всеми СУБД и приводить их в один вид для работы. ADO например.


Базы будут находится на отдаленых серверах и вполне возможно операционки на них будут разные. 
Клиентское приложение должно подключится к базе  выполнить процедуру и обработать результат... 

Цитата

Определенно не правильное простое решение! 

В каком плане оно не простое? 
Я понимаю что такая передача результата не совсем "красива", но такой метод универсален в плане типов данных... 

Автор: DarkProg 6.7.2012, 15:26
Цитата(namervasek @  6.7.2012,  16:11 Найти цитируемый пост)
В каком плане оно не простое? 

В том плане, что вы пытаетесь что-то вроде велосипеда изобрести... на крайняк храните всё в тексте, но если вдруг кому-нить моча стукнет в голову и они решат на винде поменять разделитель даты с "." например на "/", то при попытке преобразования вылетит милый эксепт на клиентском приложении.
Клиентские библиотеки для доступа к данным специально созданы для того чтобы пользователю данные представлялись в уже нормальном виде, а программисты могли абстрагироваться от того как там и что хранится в базе.

Автор: namervasek 6.7.2012, 15:58
DarkProg, 
Эм...
То есть если я скажем опишу такой стандарт

Код

Процедура: ААА
Возращаемое переменые: 
  1) Имя: CreateTime, Тип: дата и время
  2) Имя: Msg, Тип: строка


То какие бы разработчики типы строк и дат не употребляли  на клиентской стороне будет все норм?

Автор: Frees 6.7.2012, 16:30
Цитата(namervasek @  6.7.2012,  18:58 Найти цитируемый пост)
То какие бы разработчики типы строк и дат не употребляли  на клиентской стороне будет все норм?

В клиентском приложении (в случае с ADO) тебе будет не важно какой формат баты у той или иной СУБД, за это беспокоится библиотека доступа, и драйвер конкретной СУБД.



Цитата(namervasek @  6.7.2012,  18:11 Найти цитируемый пост)
Базы будут находится на отдаленых серверах и вполне возможно операционки на них будут разные. Клиентское приложение должно подключится к базе  выполнить процедуру и обработать результат... 

Не имеет значение на какой ОС будет крутится база.

Добавлено через 5 минут и 3 секунды
Цитата(namervasek @  6.7.2012,  18:11 Найти цитируемый пост)
В каком плане оно не простое? 

На сервере в процедуре придется конвертировать родной формат в ваш бинарный, а для этого не у всех СУБД хватит инструментов.

Автор: namervasek 6.7.2012, 16:43
Frees, ясно спасибо за помошь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)