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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.