主にオラクルのデータをAccess2000からレポートして使っています。
〒コードが、数字データで保存してあります。
例)3430123
今はクライアントPC側のAccessで
例) 343-0123
と計算させて利用しています。
こういった計算はオラクル側でPL/SQLなどを利用したほうが効率はいいでしょうか?
それとも毎回計算させるのであれば、クライアント側かサーバ側で計算速度に違いはありませんでしょうか?
※実際にはオラクルの〒コードのフィールドが数値になってしまっているので、
コードが5~7桁とデータがまちまちになってしまっています。
例)北海道 0013304 → 13304 (とオラクルで保存)
データを利用するとき、5桁と判断して001-3304 と計算させています。
00で始まる番号、0で始まる番号、0以外で始まる番号の3種類データがあります。
まだ、PL/SQLを利用したことがないのですがこれから活用しようと考えています。
No.4ベストアンサー
- 回答日時:
もし力技でよければ
translate(to_char(postal_no, '000,00000'), ',_','-')
で生成できます。↑の',_'のアンダーバーは' 'にしてください。
ユーザ関数などを使って
NUMTOPOSTALCODE関数などで覆い隠さないと
一見して何を意図しているのか分かりません。
要注意なコードの一つの例みたいものですね。
速度に関しては、この程度では大して変わらないと思います。
但し、レスポンスに非常困っている、大量のデータを一気に処理している
明らかにクライアントは時代遅れのマシンである。
を満たす場合には「やってみますか?」程度だと思います。
ちなみビューをかますと、レスポンスがガタ落ちすることが多いので安易な利用は控えたほうがよいです。
アドバイスありがとうございます。
本来ならフィールド定義を変更したいとことですが
カスタマイズされたアプリケーションが動作しなくなる
ことが分かったので、計算させるしかないのが現状です。
translata...
を使えば、データの桁数に係わらず対応出来ますね。
工夫して試してみます。
No.5
- 回答日時:
状況は完全には分かりませんが、、、
可能であれば、カラム自体をVARCHAR2に変えてしまうべきでしょうね。データ件数が膨大で処理が重いということであれば、スナップショットを作ってしまうのが効果的だと思います。
SQL_PLUSは基本的にサーバでのデータ処理に使うのが有効だと思います。
No.3
- 回答日時:
(ベーステーブルの構造は修正してはならないという条件付きで)
計算速度的には、どちらでやっても似たり寄ったりだとは思います。
クライアントのデータ処理の方が多様になる傾向が大きいように思うので、どうせ必ずしなければならないなら、私は、サーバー側で処理してしまいます。デコード関数をPL/SQLで作っちゃって、ビューをかぶせてしまう形になるでしょうか。
そうしておけば、将来、違うレポートで使うなどの場合でも、変換処理のことは二度と考えずにすみます。
ビューについてのコメントを頂いたので試してみました。
いままで全然利用していなかったのですが、場合によっては効果がありますね。
クライアント側の処理をビューで持たせたところ処理時間が1/3~1/4になりました。
ありがとうございました。
No.2
- 回答日時:
私の場合そう言う時にはオラクル側で、
declare
A varchar2(7); --オラクルDBの郵便番号の文字型
B varchar2(8); --Accessに引き渡す郵便番号
begin
A := lpad(to_char(郵便番号),7,'0') --郵便番号を文字型に変換し7桁0埋め処理をする
B := substrb(A,1,3)||'-'||substrb(A,4); --ハイフンを付与する
end;
とSQL関数で対応しています。
簡単な処理ですので速度的にはAccess側、ORACLE側どちらで処理しても、問題にはならない程の速度で処理できるはずです。
構造上では、不正な型で格納しているのはOracle側なので、成形した正しい型のものをAcsessに渡してやるのがいいかも知れません。
見当違いの答えだったらごめんなさい。
No.1
- 回答日時:
こんにちは
オラクル側で数値データで保存してあるのは悲劇ですね。
クライアント側かサーバ側のどちらが効率的かということですが、クラアントがたくさんあるなら、サーバで集中させて処理するより分散したほうが計算速度は速いと思います。
ただ、オラクルはPL/SQLなどで引数が違うだけのものは解析してメモリにキャッシュしておくので毎回計算といっても、実行文→解析→実行 ということはやってないません。
しかし、今回の場合ですと簡単な処理なのでどっちでもいい気がします。^^;
私がやるならオラクル側のテーブルの変更をするか、ビューを作ります。
ただPL/SQLは便利なので勉強を兼ねて利用することをオススメです!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 格安スマホ・SIMフリースマホ 今 ahamoを使っていて 4898円以下になる携帯会社があれば乗り換えたいです 20GBと24時間 9 2022/09/27 07:43
- Excel(エクセル) ネットワーク上のエクセルとリンクしている時にデータ更新をvbaで、refresh Allで行う場合の 2 2023/04/10 05:39
- 数学 賃料と専有面積のデータが60部屋分ほどがあり、 賃料÷専有面積(=1㎡あたりの賃料)の数式で計算する 2 2023/02/18 20:33
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) エクセルで飛び飛びのセルの計算 5 2022/10/25 05:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
処理件数を非表示にしたい
-
データ型でFloatとreal の計算...
-
SELECT と INSERT の速度
-
カーソル0件の時にエラーを発生...
-
NVLとDECODEのスピード差
-
ストアドプロシージャ_カーソル...
-
MERGEコマンドについて
-
SQL plus で改行
-
カーソルを使って、最終行レコ...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
for whichの使い方
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
SQL文で、合計が0のレコードを...
-
ExcelのVBAコードについて教え...
-
速度が低下し無効になったアド...
-
SELECT 文 GROUP での1件目を...
-
副問合せの書き方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
データ型でFloatとreal の計算...
-
処理件数を非表示にしたい
-
カーソルを使って、最終行レコ...
-
カーソル宣言をIFで分けられま...
-
NVLとDECODEのスピード差
-
ACCESSで一括処理する方法
-
ストアドプロシージャ_カーソル...
-
Accessで処理経過を表示したい...
-
SELECT と INSERT の速度
-
カーソルオープンの処理について
-
クエリの実行時間の目安
-
動的SQLの処理件数
-
RDBとVSAMの比較
-
(x 行処理されました)を表示さ...
-
oracle pl/sqlの処理速度について
-
【PL/SQL】カンマ区切りのレコ...
-
PL/SQL で continue ?
-
SQL plus で改行
-
複数レコードを1変数にセット...
おすすめ情報