![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
OSのバージョンUPに伴いoracle、perl、DBI等のバージョンもあげました
perl 5.8.7 DBI-1.52 oracle9i
perl 5.005_03 DBI-1.13 oracle8.0.5
その関係かはよくわからないのですが、エラー処理の実行結果が異なってしましました
$sth = $dbh->prepare("$sql") or die "Cannot prepare: " . $dbh->errstr();
$sth->execute() or die print "データベースエラー";
このSQL文の実行結果はエラーの際、「データベースエラー」というdieメッセージとなります
しかしバージョンをあげた方では、メッセージが表示されません
$sthを出力してみたところ、空でした
エラーでない場合の実行結果は同じになります
原因がわからず困っています
同じようにエラー処理(エラーメッセージを表示させたい)のですが、どのようにしたらよいでしょうか?
どなたかご教授ください
宜しく御願いします
No.2ベストアンサー
- 回答日時:
> -> errstr in DBD::_::common
と出力されているから、
die "Cannot prepare: " . $dbh->errstr();
が実行されてますね。
こちら側でもエラーメッセージを出力すれば良いのでは。
# でも die print はあんまりだと思う。
回答有難う御座います!
そうなんです、バージョンUPした方では「die "Cannot prepare: " . $dbh->errstr();」が実行されているようです
しかしバージョンが低い方では実行されていないようです
この違いがどうして起こるのか不明です
osamuyさんのアドバイスによりテストしてみたところ、確かにここでエラー出力できました
上記の問題が解決されていないので、もう少し検討してみたいと思います
有難う御座いました
No.1
- 回答日時:
DBIのトレースをオンにして、何が起きているか確認してみて下さい。
この回答への補足
アドバイスありがとうございます
早速以下のようにトレースをオンにして確認してみました
$dbh->trace(2, 'DBI.trace');
$sth = $dbh->prepare("$sql") or die "Cannot prepare: " . $dbh->errstr();
$sth->execute() or die print "データベースエラー";
結果は以下です
DBI::db=HASH(0x41c0d0) trace level set to 0x0/2 (DBI @ 0x0/0) in DBI 1.52-nothread (pid 12817)
Note: perl is running without the recommended perl -w option
-> prepare for DBD::Oracle::db (DBI::db=HASH(0x3d660c)~0x41c0d0 ' select * from denshi where name <*>like '%'%'')
-> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x41c5bc)~INNER)
ERROR: '911' 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' (err#1)
<- DESTROY= undef at test.pl line 197
!! ERROR: '911' 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' (err#0)
<- prepare= undef at test.pl line 197
1 -> FETCH for DBD::Oracle::db (DBI::db=HASH(0x41c0d0)~INNER 'ParamValues')
ERROR: '911' 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' (err#0)
1 <- FETCH= undef at test.pl line 197
-> errstr in DBD::_::common for DBD::Oracle::db (DBI::db=HASH(0x3d660c)~0x41c0d0)
ERROR: '911' 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' (err#0)
<- errstr= 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' at test.pl line 197
! -> DESTROY for DBD::Oracle::db (DBI::db=HASH(0x41c0d0)~INNER)
ERROR: '911' 'ORA-00911: 文字が無効です。 (DBD ERROR: error possibly near <*> indicator at char 127 in ' select * from denshi where name <*>like '%'%'' (err#0)
! <- DESTROY= undef during global destruction
select文は長文のため短くしてあります
トレースをオンにしてみましたが、扱うのがはじめてなもので、あまり理解できませんでした、すみません
この結果から何かわかりますでしょうか?
oracleでは双方共に「ORA-00911」エラーを返しているのは、SQL文の条件にアポストロフィ'が入っているからで、これはエラーになって正しいです
宜しく御願いします
すみません、まだ解決していないのですが、補足説明する場所がわからずここに記入させていただきます
上記補足のトレース結果の条件文が間違えていました
where name like '%'%' or code like '%'%'
ただしくはこちらになります
宜しく御願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSがコンパイルエラーになりま...
-
教えて下さい。
-
【python】requestsでdataとし...
-
perlをバージョンアップしたら...
-
Pealでエラーメール自動処理
-
PerlからDBの接続
-
LCD ディスプレイを Raspberry ...
-
VBでグローバル変数を宣言するには
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAで、ユーザーフォー...
-
ユーザーフォームに最小化・最...
-
Access VBA標準モジュールにつ...
-
PerlモジュールをWindowsアプリ...
-
Sub Workbook_Open()でユーザー...
-
シートモジュールで使う変数を...
-
オフコン(富士通Kシリーズ)...
-
Perl モジュールのアンインスト...
-
vba userFormのSubを標準モジュ...
-
cygwinでcshが認識されず困って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSがコンパイルエラーになりま...
-
教えて下さい。
-
perlをバージョンアップしたら...
-
【python】requestsでdataとし...
-
SWI-Prologでのエラーに関して
-
WebClientの文字列送信にてエラー
-
w3cの検証エラー?
-
Pythonプログラミングでエラー
-
powershellで引数受け取り時に...
-
Excelマクロでセルに値が入力さ...
-
perl if文 助けて~
-
PerlからDBの接続
-
POSTで送信するとエラーになる
-
erf(x)とerfc(x)のカタカナ読み...
-
VBからブラウザの表示状態(リ...
-
au「W54S」だけcgi-lib.plで不...
-
%stderr%の値が何をさしているのか
-
CGIの接続エラー
-
ASPが実行できない(エラー500
-
構文エラーのある行番号を知りたい
おすすめ情報