• 締切済み

C++.NETでのOracle埋め込み

C++ 6.0ではOracle埋め込みはEXEC SQL BEGIN DECLARE SECTION;と 定義していたのですがC++.NETでは ORA_SUB.cpp(15) : error C2146: 構文エラー : ';' が、識別子 'SQL' の前に必要です。 ORA_SUB.cpp(15) : error C2501: 'EXEC' : 識別名を宣言するのに、型が指定されていません。 ORA_SUB.cpp(15) : error C2146: 構文エラー : ';' が、識別子 'BEGIN' の前に必要です。 ORA_SUB.cpp(15) : error C2501: 'SQL' : 識別名を宣言するのに、型が指定されていません。 ORA_SUB.cpp(15) : error C2146: 構文エラー : ';' が、識別子 'DECLARE' の前に必要です。 ORA_SUB.cpp(15) : error C2501: 'BEGIN' : 識別名を宣言するのに、型が指定されていません。 ORA_SUB.cpp(15) : error C2146: 構文エラー : ';' が、識別子 'SECTION' の前に必要です。 とエラーになります。 C++.NETでは使い方が違っているのでしょうか? よろしくお願い致します。

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

>procをプリコンパイルの仕方がわかりません。 私もわかりません。 >定義とパスだけでは駄目なのでしょうか? 駄目です。SQLとかいわれてもC/C++のコンパイラ は何の意味だか知りません。 Oracleの説明書とネットで調べてください。 ちょっと私なりに調べましたが proc.exeがどっかにあるはずです。 VC6でできていたのは恐らくビルド前イベント(設定)で プリコンパイルが実行されていたからだと思います。 VC6の設定をみればわかるはずですが。 http://www2s.biglobe.ne.jp/~mindseye/oracle/osorezan/index.html http://www.digitalpoint.com/lists/72132.html あとは調べてみてください。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

procかなんかでプリコンパイルする必要があるのではないですか?

funky_gramer
質問者

補足

すいません、初心者の為、procをプリコンパイルの仕方がわかりません。定義とパスだけでは駄目なのでしょうか?

関連するQ&A

  • Cソースにホスト変数を宣言したヘッダをインクルード方法

    C言語ソースにホスト変数を宣言したヘッダをインクルードする記述を教えてください。下記の記述をしたのですが、エラーになります。 EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; #include "../host_header.h" EXEC SQL END DECLARE SECTION;

  • ROWID型の宣言について(Pro*C)

    (Oracle9i) Pro*Cにて、ROWIDを使用したSELECT&INSERTをしたいのですが、 ホスト変数をROWID型で宣言しようとするとエラーになります。 [PCC-S-02201, 記号"rowid"が見つかりました。 次のうちの1つが入るとき~] 宣言の仕方は以下の通りです。  EXEC SQL BEGIN DECLARE SECTION;   rowid fetch_ROWID;   short fetch_ROWID_ind;  EXEC SQL END DECLARE SECTION; ROWIDという型はORACLEにあるので、なぜプリコンパイルが通らないのか 分かりません。 どなたかお分かりになる方がいらっしゃいましたらよろしくお願いいします。 ちなみに以下のような使い方をしようとしていますので、参考までに 載せておきます。  EXEC SQL DECLARE C_XXX CURSOR FOR   SELECT ・・・,ROWID FROM XXX FOR UPDATE ・・・  EXEC SQL OPEN C_XXX;  EXEC SQL WHENEVER NOT FOUND DO break;  while(1){   EXEC SQL FETCH C_XXX INTO    ・・・,    :fetch_ROWID:fetch_ROWID_ind;   EXEC SQL    UPDATE XXX    SET ・・・    WHERE ROWID=:fetch_ROWID:fetch_ROWID_ind;  }

  • CでSQLのテーブルを読む

    SQLのテーブルがあります。 レコードを1行ずつ読むソースを教えてください。 データベースはさっぱり分かりません。 create table mytable (  name text,  age int ); このテーブルからint型のageを列挙したいと思います。 intを読むわけですから EXEC SQL BEGIN DECLARE SECTION; int i; EXEC SQL END DECLARE SECTION; が必要ですよね。あとはさっぱり分かりません。

  • Pro*cのバインド変数をカンマ区切りで指定できますか?

    Pro*cのバインド変数で下記のようなwhere句のinでカンマ区切りを指定することはできないのでしょうか? Oracle9iです。 適当な書き方で申し訳ありませんがよろしくお願いします。 ------------------------ EXEC SQL BEGIN DECLARE SECTION; const char *bindAAA; EXEC SQL END DECLARE SECTION; // bindAAAバインド変数に'1,2,3'という具合に格納 ↓のSQLを実行したい select * from AAA where BBB in (:bindAAA)

  • PRO*Cでテーブル名にバインド変数は使えますか?

    PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;

  • pro*c で pl/sql に変数を渡すとora-01458発生

    oracle初心者です。よろしくお願いします。 oracleのバージョンは 10.1.0.2.0 開発言語はpro*c pl/sql です。 テキストファイルを処理するAPを作成しています。 ディレクトリオブジェクト名を、pro*cからpl/sqlを呼び出す際に変数として渡していますが、実行するとora-01458エラーが発生してしまいます。 pro*cのコーディングは以下の通りです。 EXEC SQL BEGIN DECLARE SECTION; char Pass[50+1]; char Txtnm[20+1]; int nStatus; VARCHAR vErrMsg[100+1]; VARCHAR vErrCode[10+1]; EXEC SQL END DECLARE SECTION; ZeroMemory( Pass, sizeof( Pass ) ); strcpy( Pass, "DIR_A" ); ZeroMemory( Txtnm, sizeof( Txtnm) ); strcpy( Txtnm, "TEST.txt" ); EXEC SQL EXECUTE BEGIN  proc9999( :Pass, :Txtnm, :nStatus, :vErrMsg, :vErrCode ); END; END-EXEC; しかし、このpl/sqlをsqlplusから下記の内容で実行すると正常に動作します。 DECLARE in_file_dir VARCHAR2(255) :='DIR_A'; in_file_name VARCHAR2(255) :='TEST.txt'; io_sts number; io_msg VARCHAR2(255); io_msgcd VARCHAR2(10); BEGIN PROC9999( in_file_dir, in_file_name, io_sts, io_msg, io_msgcd ); END; 同じことをしていると思うのですが何故pro*cではエラーになるのでしょうか?

  • VC++ のエラーについて。

    何度もすみません。 今ビルドしたらエラーが。。 環境を教えてくれる人が今日いないのでどうしたらいいのか(T-T) ○○.sqxにSQL文INSERTを追加したのですが、 'EXEC' : 定義されていない識別子です。 error C2146: 構文エラー : ';' が、識別子 'SQL' の前に必要です。 error C2065: 'SQL' : 定義されていない識別子です。 error C2146: 構文エラー : ';' が、識別子 'INSERT' の前に必要です。 error C2065: 'INSERT' : 定義されていない識別子です。 error C2146: 構文エラー : ';' が、識別子 'INTO' の前に必要です。 error C2065: 'INTO' : 定義されていない識別子です。 error C2146: 構文エラー : ';' が、識別子 'TRSS_SM' の前に必要です。 error C2065: 'TRSS_SM' : 定義されていない識別子です。 error C2228: '.FAXSENDINF' : 左側がクラス、構造体、共用体ではありません。 error C2146: 構文エラー : ';' が、識別子 'VALUES' の前に必要です。 error C2065: 'VALUES' : 定義されていない識別子です。 error C2143: 構文エラー : ')' が ':' の前に必要です。 error C2059: 構文エラー : ')' だって、怒られました。 何のことだか?さっぱり? ほかのどこかの影響でしょうか? 何か知っている人お願いします。 Visual Studio 6.0 VC++ Windows2000

  • Pro*C NUMBER型のカラムにホスト変数を使用してINSERTしたいとき

    テーブルの定義 ----------------------------------------- TableName ColmunName 型    Length ----------------------------------------- T1     C1     VERCHAR2 20       C2     NUMBER  16(0) ----------------------------------------- プログラム <stdio.h> <string.h> <sqlca.h> void main(void){   char statement[1024 + 1];   /* ホスト変数定義 */   EXEC SQL BEGIN DECLARE SECTION;     VERCHAR hC1;     <?????> hC2;             ← ココです(^^;   /* INSERT文の定義 */   strcpy(statement, "INSERT INTO T1 (C1,C2) VALUES (?,?)");   EXEC SQL PREPARE S1 FROM :statement;    /* メイン(ループ) */   while(1)     hC1 (ファイルから読込んだ値を代入)     hC2 (ファイルから読込んだ値を代入)     EXEC SQL EXECUTE S1 USING :hC1, :hC2;   } } <質問> 上記のテーブルに、あるファイルから読込んだデータを、 ホスト変数hC1、hC2に代入して、 INSERTしたいのですが、 カラムC2の型がNUMBERの16桁のため、 ホスト変数hC2の型を何で定義したら良いのか わかりません。 (ちなみに、ファイルはテキストで読込みます) 何か良い方法があるのでしょうか?

  • C言語 埋め込みSQL ecpg

    C言語の埋め込みSQLで質問です。 ご教示ください。初心者です。 【環境】 Windows7 64bit gcc:5.3.0 PostgreSQL:9.6.1 【pgcファイル】 #include <stdio.h> exec sql include sqlca; int main(char* argx[], char* argv[]){ exec sql begin declare section; char NAME[256]; char MAIL[256]; exec sql end declare section; exec sql connect to bookmark user dbuser; strcpy(NAME,argv[1]); strcpy(MAIL,argv[2]); exec sql insert into Name_list (name, mail) values (:NAME, :MAIL); exec sql commit; exec sql disconnect; return 0; } 【症状】 以下のコマンドを実行するとエラーが出ます。 -Iでインクルードしようとしています。 C:\cTest\c>ecpg name_list_db.pgc -I C:\postgresql\include ecpg: ファイル"-I"をオープンできませんでした: No such file or directory ecpg: ファイル"C:\postgresql\include"をオープンできませんでした: No such file or directory 一応Cファイルは生成されます。 強引にgccすると下記のエラーが出ます C:\cTest\c>gcc -o name_list_db name_list_db.c -I C:\postgresql\include -lecpg c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lecpg collect2.exe: error: ld returned 1 exit status どうすれば良いかご教示ください。 この辺のWebサイトを参考にしました。 http://se.cite.ehime-u.ac.jp/~aman/memo/SQL/ecpg.html 以上よろしくお願いいたします。

  • C++のヘッダーについて

    C++のプログラミングをしています そこで出てきた問題なのですが・・・ class Aのヘッダファイルa.hをほかのcppファイルにインクルードすると、 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません error C2146: 構文エラー : ';' が、識別子 'test' の前に必要です。 とほかのヘッダファイルでコンパイルエラーがでます ヘッダファイルをインクルードしたときのみこのエラーがでて困っています。 解決法や、ヒントになりそうな事例を知りませんでしょうか?

専門家に質問してみよう