山田健一のブログ

業務に強いフリーITエンジニア 山田健一のブログです

Firebirdで外部データベースのテーブルをSELECTする

私はフリーITエンジニアとして、業務分析、業務改善提案を含む設計、製造、受入検査を含む検査、システム運用開始後の運用改善提案など、様々な分野を担当しています。

Firebirdで外部データベースのテーブルをSELECTする方法を紹介します。

(実際の使用例です)

 

次のようなストアドプロシージャを作成してください。


SET TERM !!;
CREATE
OR 
ALTER
PROCEDURE sp_select_m01_personal_base
    (
    v_database               varchar(255)   /* 外部データベースのパス */
    ,v_user                  varchar(255)   /* USER */
    ,v_password              varchar(255)   /* PASSWORD */
    )
RETURNS(
    v_personal_id            char(10)       /* 個人ID */
    ,v_person_name           varchar(20)    /* 氏名 */
    ,v_login_id              varchar(20)    /* ログインID(ランダムに自動生成) */
    ,v_picture_taking_day    timestamp      /* 写真撮影日時 */
    ,v_person_name_kana      varchar(30)    /* 氏名ふりがな */
    ,v_member_class          char(1)        /* '1'~'9' */
    )
AS
DECLARE v_command varchar(255);
BEGIN
    v_command = 'SELECT personal_id,person_name,login_id,picture_taking_day,person_name_kana,member_class FROM m01_personal_base;';
    FOR EXECUTE STATEMENT :v_command
    ON EXTERNAL DATA SOURCE :v_database
    AS USER :v_user
    PASSWORD :v_password
    INTO
        :v_personal_id           --   ,personal_id
        ,:v_person_name           --   ,person_name
        ,:v_login_id              --   ,login_id
        ,:v_picture_taking_day    --   ,picture_taking_day
        ,:v_person_name_kana      --   ,person_name_kana
        ,:v_member_class          --   ,member_class
    DO BEGIN
      SUSPEND;
    END
END
!!
SET TERM ;!!

 

v_command に代入しているSELECT文が外部のデータベースに対して発行するものになります。
このSELECT文で得られるデータをストアドプロシージャで返す形になります。
このストアドプロシージャはSELECT文でテーブルのように扱えるので、他のテーブルとのJOINも可能です。

この基本形を覚えておけば、応用は容易です。