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

Вниз

Interbase. Наборы данных   Найти похожие ветки 

 
juice   (2005-02-16 12:10) [0]

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


 
Johnmen ©   (2005-02-16 12:15) [1]

Да, поддерживает что-то "типа наборов данных"
См. докумендацию по SELECT


 
msguns ©   (2005-02-16 12:20) [2]

Что-то типа этого ?

SET TERM ^ ;

/******************************************************************************/
/***                           Stored Procedures                            ***/
/******************************************************************************/

CREATE PROCEDURE SP_GETCOM_IPDAY (
   DS DATE,
   DE DATE)
RETURNS (
   IPX CHAR(15),
   QDAYS INTEGER,
   QNODPRX INTEGER,
   QNOD INTEGER,
   QNODALL INTEGER,
   PNODPRX NUMERIC(15,2),
   QURLPRX INTEGER,
   QURL INTEGER,
   QURLALL INTEGER,
   PURLPRX NUMERIC(15,2),
   QPOCPRX INTEGER,
   QPOC INTEGER,
   QPOCALL INTEGER,
   PPOCPRX NUMERIC(15,2),
   QSIZPRX INTEGER,
   QSIZ INTEGER,
   QSIZALL INTEGER,
   PSIZPRX NUMERIC(15,2))
AS
BEGIN
 EXIT;
END^

SET TERM ; ^

/******************************************************************************/
/***                           Stored Procedures                            ***/
/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE SP_GETCOM_IPDAY (
   DS DATE,
   DE DATE)
RETURNS (
   IPX CHAR(15),
   QDAYS INTEGER,
   QNODPRX INTEGER,
   QNOD INTEGER,
   QNODALL INTEGER,
   PNODPRX NUMERIC(15,2),
   QURLPRX INTEGER,
   QURL INTEGER,
   QURLALL INTEGER,
   PURLPRX NUMERIC(15,2),
   QPOCPRX INTEGER,
   QPOC INTEGER,
   QPOCALL INTEGER,
   PPOCPRX NUMERIC(15,2),
   QSIZPRX INTEGER,
   QSIZ INTEGER,
   QSIZALL INTEGER,
   PSIZPRX NUMERIC(15,2))
AS
DECLARE VARIABLE Y SMALLINT;
DECLARE VARIABLE M SMALLINT;
DECLARE VARIABLE D SMALLINT;
begin
 /*  Для каждого IP */
 FOR SELECT DISTINCT SQIP FROM sqlog
      where sqtime between :ds and :de
      into :ipx
 DO
   BEGIN
     qdays=0;
     qnod=0; qnodprx=0;
     qurl=0; qurlprx=0;
     qpoc=0; qpocprx=0;
     qsiz=0; qsizprx=0;
     /* 1. Подсчет общего кол-ва дней */
     FOR
       SELECT DISTINCT PYEAR, PMONTH, PDAY from
          sp_get_ext_by_period(:ds,:de)
          WHERE SQIP=:ipx
          INTO :y, :m, :d
     DO BEGIN qdays=qdays+1; END
     /* 2. Подсчет данных по дов.узлам */
     SELECT qnodes, qurls, qpocket, qsize
       FROM SP_SUM_PRX_IP(:ipx,:ds,:de)
       INTO :qnodprx, :qurlprx, :qpocprx, :qsizprx;
     /* 3. Подсчет данных по недов.узлам */
     SELECT qnodes, qurls, qpocket, qsize
        FROM SP_SUM_IP(:ipx,:ds,:de)
        INTO :qnod, :qurl, :qpoc, :qsiz;
     qnodall=qnodprx+qnod;
     qurlall=qurlprx+qurl;
     qpocall=qpocprx+qpoc;
     qsizall=qsizprx+qsiz;
     pnodprx=qnodprx/qnodall*100;
     purlprx=qurlprx/qurlall*100;
     ppocprx=qpocprx/qpocall*100;
     psizprx=qsizprx/qsizall*100;
     suspend;
   END
end
^

SET TERM ; ^


 
Johnmen ©   (2005-02-16 12:27) [3]

>msguns ©   (16.02.05 12:20) [2]

Да, и ещё я забыл добавить в [1]
документация по процедурному языку, в частности операторы цикла...
:)


 
juice   (2005-02-16 12:41) [4]

ОК, понял.



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

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

Наверх




Память: 0.46 MB
Время: 0.028 c
4-1107427283
AlexTregubov
2005-02-03 13:41
2005.03.20
TWAIN


4-1107707452
Локли
2005-02-06 19:30
2005.03.20
Уровень звука


4-1107783969
Anthony
2005-02-07 16:46
2005.03.20
Как открыть дверцу CD-RW?


14-1109154227
[wl]
2005-02-23 13:23
2005.03.20
Подскажите веб-браузер для сотового (J2ME MIDP2.0)


6-1106248906
zt50
2005-01-20 22:21
2005.03.20
Динамические IP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский