10代と話して驚いたこと

oracle10gを使用しています。

sqlplusでいくつかのDDLとDMLを一度にコピーペーストで流しました。一つ一つの処理後にcommit;も入っています。
しかし、最後のDMLで処理がとまってしまい、エラーもでません。内容は以下のようになっています。

insert into tbl_a
(select distinct col1,'2006/01/01'
from tbl_b
where col1 is not null
union
select distinct col2,'2006/01/01'
from tbl_b
where col2 is not null
union
select distinct col3,'2006/01/01'
from tbl_b
where col3 is not null
union
select distinct col4,'2006/01/01'
from tbl_b
where col4 is not null
union
select distinct col5,'2006/01/01'
from tbl_b
where col5 is not null
union
select distinct col6,'2006/01/01'
from tbl_b
where col6 is not null);
COMMIT;

この処理を単独で実行すると、成功します。sqlpulsは、実行コマンドの量に制限などあるのでしょうか?なぜ、このようになるかわかりません。ちなみに、コマンドの全文字数は3990目で、処理が停止するのは、3648文字目です。この3648文字目にあたるのが、上記の
>select distinct col3,'2006/01/01'

>select disti
です。
大変急を要ししています。
よろしくお願いします。

A 回答 (5件)

改行を省いてもエラーとなる文字数は3648文字目なのでしょうか。


それとも、『>select disti』なのでしょうか。
3648文字なら、文字数オーバーって事ですよね。
『>select disti』なら、Insert句に問題があるという事だと思います。

ただ、今後の事を考えると#1さんのおっしゃるようにストアド化した方が良いと思います。
(Unionで結合しているので、その部分を注意しないといけませんが)


どのテーブルを見れば、ロールバック領域が一杯かは私も知りません。(すみません)
ですが、ロールバックが一杯かそうでないかは、SQL文を少し修正して動かすと分かると思います。
tbl_bテーブルの各項目がNOT NULLの場合に処理対象としていますよね。
各SELECTの結果が一件しか出力されないような条件を追加してはどうでしょう。
そうすると、Insert句全体がおかしいかどうか分かると思います。

がんばってください。
    • good
    • 0
この回答へのお礼

本当に本当に、ありがとうございます。
調べてみましたところ、文字数オーバーでした。オラクル10gからは、文字数制限が3000文字から若干増えているということがわかりました。

いろいろご助言いただき、本当に感謝しております。
ありがとうございました。

お礼日時:2006/02/01 23:54

Windows のクリップボードにはたくさんコピーできるのに、それを sqlplusw.exe に貼り付けると途中までしか貼り付かないみたいです。

数行ずつに分けて貼り付けるとか…。あと、コマンドプロンプトの sqlplus.exe は、いくらでも貼り付けられるみたいです。
    • good
    • 0

@で、そのファイルを読んだらどうかしら?


sqlplusw.exe の代わりに sqlplus.exe を使ってみたらどうかしら?

この回答への補足

>@で、そのファイルを読んだらどうかしら?

ファイルを読むと成功しました。
といううことは、やはり、sqlplusの文字数制限のために、処理が停止したと考えることが妥当ということでしょうか?

補足日時:2006/01/30 08:53
    • good
    • 0

見たところ、各テーブルより値を取得して、Insertを行っているのですよね。



もしかしたら、RollBack セグメントが一杯になっているのではないでしょうか。

この回答への補足

追加質問させてください。
RollBack セグメントが一杯が一杯かどうか調べるためには、どのようにすればよいのでしょうか?

調べたところ、V$ROLLSTATにRSSIZEという項目がありますが、これと何かを比較するのでしょうか?また、どこかにログ等出力されているのであれば、それを確認したいのですが、無理でしょうか?

補足日時:2006/01/27 10:11
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
大至急調べてみます。

お礼日時:2006/01/26 22:19

参考URLによると、コマンドラインの文字数は3000文字が限界のようです。


コマンドは余分な空白などは詰められるようなので、実際の文字数は3000文字を超えると思いますが。

コピペではなくストアドプロシージャにすることをお勧めします。

http://biz.rivus.jp/sqlplus_limits.html

参考URL:http://biz.rivus.jp/sqlplus_limits.html
    • good
    • 0
この回答へのお礼

コマンドラインに制限があるかと思い、改行やコメント等を省きましたが、以前原因不明です。空白および、改行も影響してるのかもしれません。

ストアドプロシージャという手がありましたか。。。本日、急遽引き継いで、テストをしていたので最終的に動かない場合は、全編集でストアドプロシージャを作成する方向に持っていかなければならないかもしれません。。。
回答ありがとうございました。

お礼日時:2006/01/26 22:26

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

このQ&Aを見た人はこんなQ&Aも見ています

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A