//////在vc中编译时加载oraSQL8.lib文件
#pragma comment(lib,"oraSQL8.lib")#include "stdio.h"
#include "string.h"
#include "stdlib.h"EXEC SQL INCLUDE SQLCA;//////////数据库联接
int Ora_conn()
{
   EXEC SQL BEGIN DECLARE SECTION;
   VARCHAR usr[20],pass[20],serv[20];
   EXEC SQL END DECLARE SECTION;
   EXEC SQL WHENEVER SQLERROR GOTO sqlerr;    strcpy(usr.arr,"lcj");
   usr.len=(unsigned short)strlen((char*)usr.arr);
   strcpy(pass.arr,"lcj");
   pass.len=(unsigned short)strlen((char*)pass.arr);
   strcpy(serv.arr,"zlodb");
   serv.len=(unsigned short)strlen((char*)serv.arr);
   EXEC SQL CONNECT :usr IDENTIFIED BY :pass USING :serv;
   printf("Connect!\n");
   return 1; 
   sqlerr: 
   EXEC SQL WHENEVER SQLERROR CONTINUE; 
   printf("%s\n",sqlca.sqlerrm.sqlerrmc); 
   return 0; 
}/////调用存储过程
call_p(userid)
{
   EXEC SQL BEGIN DECLARE SECTION;
   char userid_p[10];
   EXEC SQL END DECLARE SECTION;
   strcpy(userid_p,userid);
   EXEC SQL EXECUTE
   BEGIN
      prtest(:userid_p,'124','1234'); 
   END;
   END-EXEC; }
void main()
{
   EXEC SQL BEGIN DECLARE SECTION;   /*sql中用到的变量*/
     char userid[9];
     int conn;
   EXEC SQL END DECLARE SECTION;
   
   conn=Ora_conn();
    printf("请输入userid的值:\n");
    scanf("%s",&userid);
    call_p(userid);
}

解决方案 »

  1.   

    superlcj,谢谢你,可是我的运行平台不是VC,而是AIX下的proc程序,按你那样写后,编译就报语法错误!在proc程序中如何调用呢?
      

  2.   

    我程序:
     ....... 
    EXEC SQL BEGIN DECLARE SECTION;
     double gzje,fsje,hxje,pdje ;
     int nresult ;
            char sqlstr[500],agcode[20];
            char date[9],zoneno[5];
      EXEC SQL END DECLARE SECTION;  ConnectDB();  strcpy(date,"20040120");
      strcpy(zoneno,"1402");  EXEC SQL execute
        begin
        test(:zoneno,:date,:gzje,:pdje,:fsje,:hxje,:nresult);
        end ;
      END-EXEC ;   
      ...........
    编译后报错:
       Pro*C/C++: Release 8.1.6.3.0 - Production on 星期五 2月 20 08:53:46 2004(c) Copyright 1999 Oracle Corporation.  All rights reserved.System default option values taken from: /oracle/precomp/admin/pcscfg.cfgSemantic error at line 56, column 12, file test.pc:
      EXEC SQL execute
    ...........1
    PCC-S-02345, SQLCHECK=SEMANTICS must be given when embedded PL/SQL blocks are us
    ed
    make: 1254-004 The error code from the last command is 1.
    Stop.
      

  3.   

    在编译的时候加上SQLCHECK=SEMANTICS选项试试
      

  4.   

    proc iname=d:\ora_proc_test\OraTest.pc userid=用户名/密码@数据库 sqlcheck=semantics