Конференция "Базы" » сопоставить запрос с 2-х разных баз [D7, IB6.x]
 
  • belmol (09.08.08 07:00) [0]
    Подскажите , есть 2 базы, в каждой базе есть табличка с уникальным столбцом, как мне вывести в один датасет сопоставленные записи.. не догоняю я что то
  • Loginov Dmitry © (09.08.08 10:01) [1]
    > Подскажите , есть 2 базы, в каждой базе есть табличка с
    > уникальным столбцом, как мне вывести в один датасет сопоставленные
    > записи.. не догоняю я что то


    Ага, ты бы IB5.x установил ;)

    Такая возможность появилась не-то в FB 2.0, не-то в FB 2.1.

  • > Loginov Dmitry ©   (09.08.08 10:01) [1]

    фиг там...насколько я помню, ПОЯВИТЬСЯ в 3,х
  • Loginov Dmitry © (09.08.08 13:21) [3]
    > фиг там...насколько я помню, ПОЯВИТЬСЯ в 3,х


    Да, поспешил малось. Месяц или 2 назад читал релизноты по FB2.5. Про гетерогенные запросы запомнил, а про версию FB-забыл ;)
  • PEAKTOP © (09.08.08 13:32) [4]
    >> Такая возможность появилась не-то в FB 2.0, не-то в FB 2.1.


    Cross-database запросы появились в 2.5. Сейчас он в стотоянии Alpha. Финальный релиз будет к октябрю.

    Синтаксис:

    [FOR] EXECUTE STATEMENT <query_text> [(<input_parameters>)]
       [ON EXTERNAL [DATA SOURCE] <connection_string>]
       [WITH AUTONOMOUS | COMMON TRANSACTION]
       [AS USER <user_name>]
       [PASSWORD <password>]
       [WITH CALLER PRIVILEGES]
       [INTO <variables>]


    Где:
    <connection_string> - строка подключения к базе данных, применяема при вызове API-функции сервера isc_attach_database() в формате <имя сервера><протокол><путь к базе данных | псевдоним базы данных из aliases.conf>
    <user_name> - имя пользователя. Можно использовать переменную CURRENT_USER, тогда можно не указывать пароль подключения <password>

    Например:

    CREATE PROCEDURE MY_PROC(
     Q_PARAM1 .....
    )RETURNS(
     .......
    )AS
     DECLARE VARIABLE P_SQL_STMT VARCHAR(512);
     .....
    BEGIN
     .....
     P_SQL_STMT = 'SELECT T1.FIELD1, T1.FIELD2,..., T1.FIELDN FROM MY_TABLE T1 WHERE (T1.FIELD1 = :P1) AND (T1.FIELD2 = :P2)  ';
     FOR
       EXECUTE STATEMENT ( :P_SQL_STMT ) (P1 := 'ABC', P2 := :Q_PARAM1)
         ON EXTERNAL DATA SOURCE '192.168.0.1:MY_DATABASE'
         WITH COMMON TRANSACTION
         AS USER CURRENT_USER
         WITH CALLER PRIVILEGES
       INTO :F1, F2
     DO
       BEGIN
       .......
       SUSPEND;
       END
    END

  • DrPass © (10.08.08 18:03) [5]

    > Сейчас он в стотоянии Alpha. Финальный релиз будет к октябрю

    2010 года?

  • > DrPass ©   (10.08.08 18:03) [5]

    Хи-Хи
  • PEAKTOP © (11.08.08 01:04) [7]
    > DrPass ©   (10.08.08 18:03) [5]
    > > Сейчас он в стотоянии Alpha. Финальный релиз будет к октябрю
    >
    > 2010 года?


    2008.
    Кстати, этот релиз по функционалу полностью догоняет PostgreSQL, считавшуюся ранее SQL-сервером №1 по функционалу. Так что новая волна холиваров обеспечена ;)
  • PEAKTOP © (11.08.08 02:55) [8]
    Вот, исправили документацию
    http://firebirdsql.su/doku.php?id=execute_statement
 
Конференция "Базы" » сопоставить запрос с 2-х разных баз [D7, IB6.x]
Есть новые Нет новых   [134435   +36][b:0][p:0.001]