Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Перекроить данные в запросе из записей в домены   Найти похожие ветки 

 
PEAKTOP ©   (2004-12-12 00:02) [0]

Уважаемые мастера !
Не сталкивался ли кто в проблемой перекройки данных из записей в домены в хранимых процедурах.
Например:
Путь имеются таблицы
 Справоник "Работники" WORKERS
      WORKER_ID       INTEGER PRIMARY KEY
      WORKER_SURNAME  VARCHAR(255)

 Справоник "Удержания" PAYMENTS
      PAYMENT_ID      INTEGER PRIMARY KEY
      PAYMENT_NAME    VARCHAR(255)

 Регистр "Удержания с работников" (WORKER_PAYMENTS)
      PAYMENT_MONTH   SMALLINT   Код месяца  1..12    
      WORKER_ID       INTEGER FOREIGN KEY (WORKERS)
      PAYMENT_ID      INTEGER FOREIGN KEY (PAYMENTS)
      PAYMENT_VALUE   DECIMAL(15,3)

Требуется : Построить таблицу "Удержания с работников в 1 месяце"  , в котрой строками в первом домене будут работники со справочника "работники", а остальными доменами строки со справочника "Удержания".

Когда клиенту сдавал прогу, создал ХП, в которую преобразования доменов в столбцы "зашил" статично. То есть, если добавиться новый элемент в справочник "Удержания", то процедуру придется ALTER.

А вот хотелось бы, чтобы выборка строилась динамично.
Никто не подскажет приемов выборок таких вот извратов ?


 
Zacho ©   (2004-12-12 00:23) [1]

Вообще-то домен в РСУБД это "тип" поля, т.ч. прекроить что-либо "из записей в домены", мягко говоря проблематично. Если уж не пользуешься общепринятой терминологией, то объясни, что такое у тебя "домен".
Подозреваю, что ты имел в виду построение кросс-запроса. Никаких встроенных средств для кросс-запросов в IB нет. Обычно или "разворачивают" результаты запроса на клиенте, или динамически формируют запрос. В FB 1.5 это вполне можно сделать и в ХП:  сформировать текст запроса и выполнить его с помощью FOR EXECUTE STATEMENT .. INTO ..


 
Zacho ©   (2004-12-12 00:40) [2]

Да, я немного соврамши: не получится в ХП, т.к. количество полей в резалтсете может быть произвольным. Так что только на клиенте.

И всё-таки ещё раз объясни задачу более подробно, не используя термина "домен", или объясни его значение как ты понимаешь.


 
PEAKTOP ©   (2004-12-12 17:21) [3]

под "домен" я имел в виду DOMAIN.

В задаче требуется выбрать из регистра значения по одному из измерений (например, по дате: то есть значения в каком-либо месяце).
При этом требуется получить "сетку":
 первый столбец строки в нем - элементы справочника "Работники".
 остальные стобцы - заголовок - элементы справочника "Удержания"
 на пересечении строк первого столбца и остальных столбцов - значения "VALUE" регистра "Удержания с работников".
------------------------
>> Zacho.
Как на клиенте сделать  - вопрос не стоит. Хотелось бы при помощи ХП или запроса.
В Python-интерфейсе доступа к InterBase вообще есть куча стандартных библиотек, в которых не такие извраты крояться. НО - на клиенте (то есть, ресурсы WEB-сервака при этом тратяться).


 
Zacho ©   (2004-12-12 17:53) [4]

PEAKTOP ©   (12.12.04 17:21) [3]
под "домен" я имел в виду DOMAIN.


Я тоже :) А теперь попробуй объяснить, что такое "Перекроить данные в запросе из записей в домены" :) Как ты себе представляешь из данных сделать домен ? :)


>  Хотелось бы при помощи ХП или запроса.


1 При помощи ХП - никак, ибо в ХП кол-во выходных параметров фиксированное.
2 Можно динамически формировать запрос на клиенте. Если хочешь, могу дать небольшой пример.


 
Sergey_Masloff   (2004-12-12 19:31) [5]

Zacho ©   (12.12.04 17:53) [4]
>1 При помощи ХП - никак, ибо в ХП кол-во выходных параметров >фиксированное.
Возвращать всегда 1 параметр VARCHAR(XXX) в котором XML

<rows>
 <row><fld1value></fld1value><fld1value></fld1value></row>
</rows>

xml разбирать на клиенте


 
Zacho ©   (2004-12-12 20:19) [6]

Sergey_Masloff   (12.12.04 19:31) [5]

Да, тоже вариант.


 
Sergey_Masloff   (2004-12-12 20:40) [7]

Zacho ©   (12.12.04 20:19) [6]
>Да, тоже вариант.
Хотя от оформления всего на клиенте отличается мало ;-)


 
Zacho ©   (2004-12-12 21:01) [8]

Zacho ©   (12.12.04 20:19) [6]

В смысле, хотел сказать: очень неплохой вариант. Были у меня подобные идеи, но до xml не додумался.

Sergey_Masloff   (12.12.04 20:40) [7]
Хотя от оформления всего на клиенте отличается мало ;-)


Ну, иногда удобнее (в случае чего править только ХП, без перекомпиляции приложения) , а может, и шустрее :)


 
Sergey_Masloff   (2004-12-12 21:20) [9]

Zacho ©   (12.12.04 21:01) [8]
Вариант с XML кстати я давно эксплуатирую, сначала это была только выгрузка данных для репликации с центральным сервером, потом печать (на клиента передается XML который клиентская самописная библиотека умеет понять и распечатать в Word и Excel. Естественно весь внешний вид документа задается черех XML атрибуты так что на клиенте нет никаких перекомпиляций) ну а потом и все отчеты перевел на ту же технологию.
 Работает нормально с файлами и по несколько мег, да и десятков мег без проблем. Уже много лет так что вроде вообще никаких граблей.


 
Johnen   (2004-12-13 02:53) [10]

Идея хранить содержимое документа как хмл имеет большое будущее...:)


 
PEAKTOP ©   (2004-12-14 00:03) [11]

>>Sergey_Masloff
Большое спасибо за мысль! Можете долго надо мной смеяться, но для меня это действительно прорыв.
Представить данные регистров в виде одного домена, но со списком всех значений, это дейсвительно в голову не приходило.
-------------------------------------
>> Zacho.
Я всего-лишь попытался обяснить задачу как можно проще. Азы (и не только азы) работы с ИнтерБазой и ЖарПтицей я знаю, и объяснять мне их не надо.
------------------------------------
Задача, по сути своей, тривиальная для тех людей, которые занимались приведением баз хотя бы ко второй нормальной форме (не говоря о третьей), и каждый из них хотя бы раз с ней сталкивался. Вполне понятно, что "в лоб" ее не решишь, и когда я задавал этот вопрос в форуме, меня интересовал какой-либо прием, при помощи которого эту задачу можно хотя бы упростить.
Своей цели я достиг, за что большое спасибо Sergey_Masloff. Вопрос считаю закрытым.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1104140515
Cherepah
2004-12-27 12:41
2005.01.16
Как узнать размер Record?


3-1102684136
Rule
2004-12-10 16:08
2005.01.16
Вопрос простой, аж смешно по DBComboBox


14-1104181424
Кудесник
2004-12-28 00:03
2005.01.16
Ура!!! Я на GPRS!!!


8-1097334766
DL
2004-10-09 19:12
2005.01.16
Преобразование массива в bitmap


1-1104577794
hawkins
2005-01-01 14:09
2005.01.16
Компонент для работы с html





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский