- - PR -
PLS-00123:プログラムが大きすぎます。 の対策で悩んでいます
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-03 20:47
長文にて失礼します。
現在、本番稼動中のストアドプロシージャ(SP)の修正対応をしているのですが、 SPのコンパイル時に、以下の様なメッセージが出現して 対応に四苦八苦しています。 PLS-00123:プログラムが大きすぎます。 開発環境で使用しているDBMSは、以下の通りです。 oracle 8.1.7.0 oracleの仕様書などを読んでみると、 プログラムをコンパイル後の中間言語のサイズが64KBを超えると 上記のエラーが発生することが分かりました。 ただ、現在修正中のソースは、単純に関数やパッケージに分けることができません。 その理由は、以下の通りです。 ・全関数に引数が一切ない ・使用する変数は全てソースの上部にて宣言されている ・上部にて宣言している変数を80以上の関数で使いまわしている ・コード量が7100行以上(コメントを全部除去した状態でも6000行以上) 尚、このSPは、オンラインで同時に複数回起動される可能性があります。 本番で動作している以上、 簡単に作り直すわけにもいかず、 かといってお客様の要望を反映しないわけにもいかないため、 非常に頭を抱えております。 oracleの64KBの制約を何とかして突破する方法はないでしょうか。 [ メッセージ編集済み 編集者: くくぽぽ 編集日時 2006-03-03 20:48 ] [ メッセージ編集済み 編集者: くくぽぽ 編集日時 2006-03-03 20:49 ] | ||||||||
|
投稿日時: 2006-03-03 20:54
ブロック サイズの制限ですので、ブロックで分けるだけでも OK だったような... ただ、上記の説明を見る限りブロック分けも困難極まりそうですが。(;^-^) 何にせよ、リファクタしていく必要がありますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-03 21:33
じゃんぬねっと 様、素早いご返答ありがとうございます。 今、私が切に求めているものがあります。 それは、パラメータです。 oracleの何かのパラメータの64という数値を256に変更したら、 256KBまでOK!という 魔法のパラメータはないでしょうか…。 | ||||||||
|
投稿日時: 2006-03-03 21:55
今、解決方法を探ってみたんですが、なさそうです。 PLS-00123: プログラムが大きすぎます _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-03 22:04
のリンク先から引用します。
16ビットマイコンの VM 上で動いているのかと思っていましたが、この<s>言い訳</s>言い回し、どこかで使わせてもらいます。 | ||||||||
|
投稿日時: 2006-03-03 22:55
誠に申し訳ありません。
不用意にEnterキーを押してしまいました…。 じゃんぬねっと 様、unibon 様 見ず知らずの私を 色々と助けて頂き、誠にありがとうございます。 とりあえず、色々と試して駄目だったら諦めて 無理矢理、関数化しようと思い、 1つ1つ考えられる方法を試していると…、 奇跡は起こりました。 どう違うのかは良く分からないのですが、以下の対応をすることにより、 コンパイルが通る様になりました。 1.問題のprocedureだけを宣言したパッケージを作成 2.パッケージのbody部に、procedureをコピペ コンパイル及び、実行も上手くいきます。 パッケージ内部で宣言すると、中間言語のサイズが64KBよりも 小さくなるのでしょうか? 詳細は、調査してみないと良く分かりませんが、 いずれにせよ、こんな時間帯に悩んでいる私を助けて頂き、 誠にありがとうございました。 また、問題が再発するかもしれませんが…、 その時はまた同スレッドに書き込みを行います…。 [ メッセージ編集済み 編集者: くくぽぽ 編集日時 2006-03-03 22:57 ] | ||||||||
|
投稿日時: 2006-03-04 01:38
元の大きさがわかりませんので、何とも言えないですが、 最適化を手伝っているのかもしれませんね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1