PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
13381 00/09/26 16:26:15 RE(8):PB6.5: ORACLEのSPでDWの作成(動的SQL) By kenn
13379 00/09/26 14:58:01 RE(7):PB6.5: ORACLEのSPでDWの作成(動的SQL) By Taka
13378 00/09/26 14:53:22 RE(6):PB6.5: ORACLEのSPでDWの作成(動的SQL) By BOB
13375 00/09/26 14:42:37 RE(5):PB6.5: ORACLEのSPでDWの作成(動的SQL) By BOB
13372 00/09/26 12:51:00 RE(4):PB6.5: ORACLEのSPでDWの作成(動的SQL) By kenn
13371 00/09/26 12:50:58 RE(3):PB6.5: ORACLEのSPでDWの作成(動的SQL) By Taka
13370 00/09/26 11:03:21 RE(2):PB6.5: ORACLEのSPでDWの作成(動的SQL) By Taka
13369 00/09/25 20:11:57 RE(1):PB6.5: ORACLEのSPでDWの作成(動的SQL) By kenn
13367 00/09/25 13:32:51 PB6.5: ORACLEのSPでDWの作成(動的SQL) By BOB

カテゴリ:PowerBuilderの開発環境
日付:2000年09月25日 20:11 発信者:kenn
題名:RE(1):PB6.5: ORACLEのSPでDWの作成(動的SQL)

BOBさん、こんばんは。

>レコードを取得しているOPEN OUTREC FOR SELECT.....
>の部分を動的にしたいのです。

以下の方法でいけると思います。

1.データウィンドウ用のストアドプロシージャを作成する。
create or replace procedure test (
    arg1 in varchar2,
    arg2 in number,
    ....
    dwcur in out testpkg.refcur
)
is
    dynsql varchar2(2000);
    dynwhere varchar2(2000);
begin
    dynsql := \'select col1, col2, ... from table \';
    if arg2 = 1 then
        dynwhere := \'where col3 = arg3\';
    elsif arg2 = 2 then
        ・・・・・
    else
        dynwhere := NULL;
    endif;

    dynsql := dynsql || dynwhere;
    open dwcur for dynsql;
end;

2.SELECTリストに対応するデータウィンドウを外部ソースで作成する。
データウィンドウの作成でストアドプロシージャから作成するとエラーとなってしまい、
作成できません。そのため外部ソースとして作成しておきます。
ちなみにSELECTリストは動的に変更できません。

3.作成したデータウィンドウをエクスポートし、以下の文を挿入する。
 procedure=\"1 execute test;0 ARG1 = :ARG1, ARG2 = :ARG2, ... \" arguments=((\"ARG1\", string), 
(\"ARG2\", number), ... ))
挿入する位置は他にストアドプロシージャから作成したデータウィンドウを、
エクスポートして調べていただければわかると思います。

4.インポートする。

ただしこの方法だと、SQLの構文チェックができないため、
構文にエラーがあると実行時エラーとなります。
またバインド変数を使うことができないため、
SQL文の再利用性が失われてしまい、あまり効率的とはいえません。。。
バインド変数を使う方法もあるのですが、よく覚えていないので、
この辺はORACLEの本を見ると載っていると思います。(^^;

あれ?質問内容を勘違いしてるかな?


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS Solaris
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.