• 締切済み

PCC-S-02322 未定義の識別子・・・

こんばんは、Pro*C初心者です。 プリコンパイルを行った際に下記エラーが表示されてしまいます。 *-----------------------------------------------------------------------* PCC-S-02322,未定義の識別子が見つかりました。 セマンティック・エラーです。(行252、列23、ファイルC:\HDataSYU\test.pc): EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string; ...........................................1 *-----------------------------------------------------------------------* ちなみに下記はプログラムの一部です。 char username[32]; char password[32]; char db_string[32]; memset(username, 0, sizeof(username)); memset(password, 0, sizeof(password)); memset(db_string, 0, sizeof(db_string)); strcpy(username, USERNAME); strcpy(password, PASSWORD); strcpy(db_string, DB_STRING); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string; 原因など些細な事で構いませんので、お分かりになる方ご教示下さい。 お願いします。 【環境】 os:Windows oracleのバージョン:oracle9.2.0

noname#10774
noname#10774

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

あと、気になったんですが EXEC SQL BEGIN DECLARE SECTION; から EXEC SQL END DECLARE SECTION; の間でホスト変数は宣言してますか?

noname#10774
質問者

お礼

ありがとうございます。 EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION; を追加したところ出来ました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

http://ash.or.jp/db/ora_c.htm を参考に。 >char username[32]; >char password[32]; >char db_string[32]; 変数の宣言の仕方が違うのわかりますか? urlのほうはcharじゃないですよね。

参考URL:
http://ash.or.jp/db/ora_c.htm
noname#10774
質問者

お礼

char→varcharに変更してみました。 varcharの方が良いかもしれません。 ありがとうございました。

関連するQ&A

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

    Pro*Cで、自動作成された、プリコンパイラをリンクして実行すると、「セグメント例外 (コアダンプしました)」となって止まってしまう。 Pro*Cのリストは以下のとおりでうs。 #include<sqlca.h> main() { char a[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という関数を呼び出しているところで止まってしまうらしいです。 コンパイル、リンクまでは、何事もなくいったのですが、実行してみるとダメです。 なにが、おかしいのでしょうか?

  • DATABSE LINKについて

    現在Oracle10gとOracle11gのDataBaseLinkを行っているのですが、 DBLinkを作成し、データを取得しようとしたら、 「ORA-01017: invalid username/password; logon denied ORA-02063: 先行のエラー・メッセージを参照してくださいline(XXX.XXXX.CO.JP)。」の様なエラーがおきます。 以下に実行したSQLを書いています。 create database link ****.****.co.jp connect to user identified by **** using '****' ↑に書いたユーザとパスワードで、 「Connect ユーザ/パスワード@Link先DB」をすれば繋がるのは確認出来ています。 色々ネットで調べてみたものの、原因が掴めていません。 何の要因から起こるエラーなのか、分かりません。 何かご存知の方がいらしたら、教えて頂けますか? 宜しくお願いします。

  • PCC-S-02201エラーの対処を教えてください!

    初心者です。 Oracle8、 Pro*Cで開発をしているのですが、下記のSQLでコンパイルエラーが出てしまいます。 SQLPlus上で数値を直値にしては問題なく動くのですが、うまくいきません。 何が問題なのでしょうか? やろうとしていることは、 m件(iRecordFm)からn件(iMax)までのデータを取得したいのです。 その際にいくつかWhere条件も加えたいのです。 どうぞよろしくお願いいたします。 --【エラー】----------------------------------------------- PCC-S-02201, 記号"order"が見つかりました。 次のうちの1つが入るとき: ) * + - / | union, at, connect, and, group, having, intersect, minus, or, start, with, day, hour, minute, month, second, year, 記号")" は継続のために"order"に代わりました。 --【コード】----------------------------------------------- /*ProC(仮) 実際は.cからパラメタで来ます。*/ char cCcd[] = "01"; char cAssignMon[] ="07"; char cToday[] = "2005/06/23"; int iRecordFm = 20; int iMax = 22; /*エラーが出るSQL*/ EXEC SQL DECLARE c_fireList CURSOR FOR SELECT TW.* FROM (SELECT aaa, bbb, ccc, ddd, eee, ROWNUM AS LINENO FROM mmm where bbb = :cCcd and TO_CHAR(eee,'MM') = :cAssignMon and eee >= TO_DATE(:cToday,'YYYY/MM/DD') order by eee, aaa) TW WHERE TW.LINENO >= :iRecordFm and TW.LINENO <= :iMax; -----------------------------------------------------------

  • Oracle TNSプロトコルエラーについて

    新たに作成したbbsユーザーでSQLPlusでログインしようとするとTNSプロトコルエラーが 発生します。system、scottユーザーではログインできます 以下はユーザー作成に実行したSQLです。 SQL> create user bbs 2 identified by bbs; ユーザーが作成されました。 SQL> col username format a18 SQL> col password format a18 SQL> select username,password 2 from dba_users 3 where username = 'bbs'; レコードが選択されませんでした。 ご教授よろしくお願いします。

  • DB2のログインについて

    DB2初心者です。  AIX5.2+DB2 8.1環境を使用しております。DB2へのアクセスはこのUnixシステムからのみと想定してください(すなわち、DB2へのログインクライアントもサーバーも同じ AIX上で動いているという想定です)。 この環境のもと、DB2のインスタンスユーザであるdb2inst1からDB2上のsampleへログインしようと試みます。  > db2 connect to sample user db2inst1 using xxxxx(password) すると以下のメッセージが返されます。 SQL30082N Attempt to establish connection failed with security reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001  次に、以下のコマンドを実行します。 db2 connect to sample user db2inst1 using xxxxx new yyyyy confirm yyyyy SQL30083N Attempt to change password for user id "db2inst1" failed with security reason "" (""). SQLSTATE=08001  となり、エラーでログインできません。しかし、以下の  コマンドでアクセスすると、    > db2 connect to sample DB2へ正しくアクセス可能です。  db2 connect to sample user xxx using xxx形式で  アクセスするにはどうすればよいのでしょうか。  ちなみに、DB2の設定は、インストール直後の状態です。 dbm cfgのAuthenticationはサーバーにしております。これをClientにしても結果は同じでした。また、sampleには特にGrant connect/loadも実行しておりません。  以上よろしく御願い申し上げます。

  • 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 以上よろしくお願いいたします。

  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • PCC-S-02201エラー

    初心者です。 Oracle10G、 Pro*Cで開発をしているのですが、下記のSQLでコンパイルエラーが出てしまいます。 何が問題なのでしょうか? やろうとしていることは、 「MERGE」を使用したデータの追加または変更です。 どうぞよろしくお願いいたします。 【コード】 EXEC SQL MERGE INTO MD_DZKI USING MK_SSZK ON (MD_DZKI.DZKI_SHN_CD = MK_SSZK.SSZK_SHN_CD) WHEN MATCHED THEN UPDATE SET MD_DZKI.DZKI_IG_KBN = MK_SSZK.SSZK_IG_KBN WHEN NOT MATCHED THEN INSERT (MD_DZKI.DZKI_BTEN_CD, MD_DZKI.DZKI_SHN_CD,MD_DZKI.DZKI_IG_KBN) VALUES (MK_SSZK.SSZK_BTEN_CD, MK_SSZK.SSZK_SHN_CD, MK_SSZK.SSZK_IG_KBN) WHERE MK_SSZK.SSZK_SHN_CD = 100; 【エラー】 構文エラー(行297、列15、ファイル/home/neccomts/BT_SI_BUILD/Z/BSRoot/src/compilesrc/harada003.pc): 行297、列15でエラーが発生しました。ファイル/home/neccomts/BT_SI_BUILD/Z/BSRoot/src/compilesrc/harad a003.pc EXEC SQL MERGE INTO MD_DZKI USING MK_SSZK ..............1 PCC-S-02201, 記号"MERGE"が見つかりました。 次のうちの1つが入るとき: for, register, at, close, commit, connect, declare, describe, execute, fetch, open, prepare, rollback, select, whenever, alter, audit, comment, create, delete, drop, get, grant, insert, lock, noaudit, rename, revoke, set, update, validate, arraylen, allocate, cache, call, collection, context, deallocate, enable, free, lob, object, savepoint, analyze, explain, truncate, 記号"alter," は続行のために"MERGE"に代わりました。 行0、列0でエラーが発生しました。ファイル/home/neccomts/BT_SI_BUILD/Z/BSRoot/src/compilesrc/harada00 3.pc PCC-F-02102, Cプリプロセッサ処理を実行中に致命エラーが発生しました。 *** エラー終了コード 1

  • bashで実行したsqlの実行結果の戻り値

    bashで実行したsqlの実行結果の戻り値 bashを使用して、DB間の通信の監視を行なおうとしております shellの内容はサーバAでoracleに接続(sqlplus)して、 そこからサーバBへ接続(connect)するだけの記述です。 この時、 MSG=`sqlplus ID/PASSWORD@SID @connect.sql` echo XXX で、@connect.sqlの実行結果を戻り値としてechoさせたいのですが、 この場合、どのように指定すればよいのでしょうか? (上記の状態でshellを実行すると、connect側ではなく、 sqlplusの戻り値が戻ってきてしまいます) ※conenct.sql connect 接続先DBのID/PASSWORD@接続先 exit だけのsqlで、こちらの接続確認は取れております

  • 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ではエラーになるのでしょうか?

専門家に質問してみよう