アプリ版:「スタンプのみでお礼する」機能のリリースについて

PL/SQLで、元のプログラムから、部品プログラム(以下のTEST_BUHIN)を呼ぶ際の、
パフォーマンスについてお聞きしたいことがあります。

Oracle8i環境を使っています。
以下の2つをコンパイルすると考えてください。

--------------------------------------------------
CREATE OR REPLACE TYPE test_type as object (
 COL1 NUMBER(11),
 COL2 VARCHAR2(20),
 
 (実際には、40項目くらいあります)
 
);
/
--------------------------------------------------

CREATE OR REPLACE PACKAGE BODY TEST_BUHIN AS
 PROCEDURE TESTINSERT(TESTDATA IN test_type)
 AS
 BEGIN
  INSERT INTO TESTTABLE VALUES(
   TESTDATA.COL1,TESTDATA.COL2, ・・・
   (以下略)

--------------------------------------------------

今、TESTTABLEにINSERTするプログラムを作成したいのですが、
パフォーマンスを最優先に考えたいと思っています。
その場合、元のプログラム内にINSERT文を作るべきか、
部品(TEST_BUHIN)を使用すべきか迷っています。

パフォーマンスがほぼ同じであれば、部品(TEST_BUHIN)を使用したいと思っています。
部品を使うとパフォーマンスが極端に落ちるということであれば、
部品はコンパイルせずに、元のプログラム内にINSERT文を作成しようと思います。

オブジェクトタイプ型変数を引数として渡した場合、
パフォーマンスへの影響はあるのでしょうか?
自分でも調べてみたのですが、いまいち分かりませんでした。
あと、大きな引数を渡した場合に、メモリをたくさん使ってしまうのかどうかも気になります。

文章が分かりづらいと思いますので、みなさんのご意見などを見て補足させていただきます。
Oracle、PL/SQLに詳しい方、よろしくお願いいたします。

A 回答 (2件)

in は by reference だと思います。

この回答への補足

お礼欄を使ってしまったので、こちらに書かせていただきます。

「by reference」という文字を頼りに探したところ、Oracleのリファレンスにたどり着くことができました。
英語が分からないので、知り合いに解読してもらって、理解しました。
割と急ぎだったのでとても助かりました。ありがとうございました。

補足日時:2004/07/15 20:49
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確か、集約のSQLのときも回答いただいた方ですよね。
前回に引き続きありがとうございます。

回答を拝見した感じでは、アドレスを渡しているという感じなのでしょうか?
だとすると、パラメータを渡すことで、特にパフォーマンスが落ちるとか、
メモリを余分に使うことはない、という印象を持ったのですが・・・

知識が乏しいため、もう少し詳しい説明などいただけるとありがたいです。
よろしくお願いいたします。

お礼日時:2004/07/15 11:16

inset文の埋め込みやストアド呼び出しの場合ですと、そんなにパフォーマンスは変わらない気がします。

ただ、ストアドの場合ですと、共有プールに固定できるので若干速くなるのではと。
共有プールに固定する方法は
[$ORA_HOME]\RDBMS\ADMIN\DBMSPOOL.SQLを流した後、
execute dbms_shared_pool.keep('[オーナ].TEST_BUHIN')を流せばできます。
これであればalter system flush shared_poolが実行されても開放されません。
>オブジェクトタイプ型変数を引数として渡した場合、
>パフォーマンスへの影響はあるのでしょうか?
ごめんなさい。これはよくわかりません。たぶん、TYPEのサイズに比例するだけだとは思いますが...。

たいしたアドバイスでなくて申し訳ないです。

この回答への補足

回答ありがとうございます。

呼び出し元のプログラムもストアドにするので、INSERT文のパフォーマンスは差がなさそうです。


>>オブジェクトタイプ型変数を引数として渡した場合、
>>パフォーマンスへの影響はあるのでしょうか?
>ごめんなさい。これはよくわかりません。たぶん、TYPEの>サイズに比例するだけだとは思いますが...。

ということは、オブジェクトタイプのサイズが大きいと、
部品を呼び出す際のパフォーマンスが下がるということでしょうか?
引数を渡す際の、メモリとか、裏の動きが分からないので、さっぱり見当がついてないのですが・・・。
知識がないため、質問自体がグチャグチャですみません。
また何か気づかれましたら、よろしくお願いいたします。

補足日時:2004/07/14 12:45
    • good
    • 0
この回答へのお礼

ありがとうございました。

コーディングやコード内のロジックにしか目がいっていなかったのですが、パフォーマンスチューニングの方法をいろいろ調べるきっかけになりました。
ありがとうございました。

お礼日時:2004/07/15 20:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す