OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Unix(soralis)で、Oracleに接続時にコアをはいて終了してしまう。

  • すぐに回答を!
  • 質問No.141157
  • 閲覧数573
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 33% (1/3)

Pro*Cで、自動作成された、プリコンパイラをリンクして実行すると、「セグメント例外 (コアダンプしました)」となって止まってしまう。
Pro*Cのリストは以下のとおりでうs。

#include<sqlca.h>
main()
{
chara[20],b[20];

strcpy(a,"XX");
strcpy(b,"XX");
printf("test start\n");

EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL CONNECT :a IDENTIFIED BY :b;

return(0);

sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
printf("error\n");
return(1);
}

どうやら、Oracleへ接続してるところで、sqloxtという関数を呼び出しているところで止まってしまうらしいです。
コンパイル、リンクまでは、何事もなくいったのですが、実行してみるとダメです。
なにが、おかしいのでしょうか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2

 えとですね。

 文字列は必ず、EXEC SQL BEGIN DECLARE SECTION; 内でホスト変数として宣言しなければいけません。
 なぜなら、通常の変数と違い、ホスト変数は実は構造体になっており、文字列の長さを設定するところがあるからです。
 今回の件は、通常の文字列を「構造体として」読もうとしているため、アクセスできない領域に無理矢理アクセスしようとしてコアダンプを吐いて止まってしまっています。

 また、このとき注意すべき点としては、文字列の長さを表す変数には、プログラマー(つまり Kannazuki さん自身)が自分で長さを設定しなければならないことでしょう。これが間違っているとオラクルはエラーを返します。

 具体的にはこうやります。

----------
char a[20], b[20];
   ↓
EXEC SQL BEGIN DECLARE SECTION;
varchar a[20], b[20];
EXEC SQL END DECLARE SECTION;

---------
strcpy(a,"XX");
strcpy(b,"XX");
   ↓
strcpy(a.arr, "XX");
a.len=strlen(a.arr);
strcpy(b.arr, "XX");
b.len=strlen(b.arr);
---------

 とまあ、これをやれば動くはずです。
補足コメント
Kannazuki

お礼率 33% (1/3)

ありがとうございます。
ソースを変更してみましたが、現象は変わりませんでした。
もしかしたら、コンパイラの方が影響してるのかもしれません。
gccコンパイラでコンパイルしたら、以前のソースでも問題なく動作しました。
ForteCC(CC)コンパイラでコンパイルしたら、コアをはいて異常終了してしまいました。
コンパイラによっては、Oracle8iは、使えないのでしょうか?

ソースは、以下のように変更しましてみました。

#include<sqlca.h>
EXEC SQL BEGIN DECLARE SECTION;
varchar a[20], b[20];
EXEC SQL END DECLARE SECTION;

main()
{

strcpy(a.arr, "seqpos");
a.len=strlen(a.arr);
strcpy(b.arr, "seqpos");
b.len=strlen(b.arr);

EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL CONNECT :a IDENTIFIED BY :b;

return(0);

sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
printf("error\n");
return(1);
}
投稿日時 - 2001-09-25 19:21:16
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

Pro*C&Oracle未経験ですが・・・。(^_^; 参考URLをご覧下さい。 ...続きを読む
Pro*C&Oracle未経験ですが・・・。(^_^;
参考URLをご覧下さい。


  • 回答No.3

>コンパイラによっては、Oracle8iは、使えないのでしょうか?  可能性はあります。  ForteCC は使ったことがないので何とも言えませんが。  使える方のコンパイラを使うことはできないのでしょうか。 ...続きを読む
>コンパイラによっては、Oracle8iは、使えないのでしょうか?
 可能性はあります。
 ForteCC は使ったことがないので何とも言えませんが。
 使える方のコンパイラを使うことはできないのでしょうか。
お礼コメント
Kannazuki

お礼率 33% (1/3)

ありがとうございました。
いろいろ親切に答えてくれまして・・・
いろいろ調査してみます。
また、なにかありましたら、よろしくお願いします。
投稿日時 - 2001-09-26 10:11:09
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ