请高手帮俺解答下面的20行代码为什么在pro*c中编译不通过.(俺想试验一下在pro*c中嵌入pl/sql块).请大家帮忙!!#include "sqlca.h"
#define SQLSUCCESS 0
#define SQLCODE sqlca.sqlcode
EXEC SQL DECLARE DB_NAME DATABASE;
int TestA () 
{
EXEC SQL BEGIN DECLARE SECTION;
short iTmp;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL EXECUTE
BEGIN 
iTmp:=15;
END;
END_EXEC;
return SQLSUCCESS;
sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
return SQLCODE;
}

解决方案 »

  1.   

    你这几行代码是想做什么?
    iTmp:=15; 不是PL/SQL,是C的语法:iTmp = 15。具体报什么错,把编译的错误信息贴上来。
      

  2.   

    不好意思,我这里上网不方便.
    你说的那个语句,即使用iTmp = 15也不行,还是编译不通过.
    出现的错误信息相同,如下:
    row 20,column 2 发生致命错误.文件 D:\enhaku\test.pc
    }
    .1
    PCC-S-02022, sql语句中发现文件终了。
    row 0,column 0 处发生错误.文件 D:\enhaku\test.pc(就是这20行代码的程序)
    PCC-F-02102, C preprocess处理过程中发生致命错误。
    这个问题已经困扰我好几天了,为什么~~~~~~~~~~~!!!!!!!!!!!???????????????
    哪位神仙来就我!!!!!!!!!!!!!!!!!!!!!
      

  3.   

    EXEC SQL EXECUTE
    BEGIN 
    iTmp:=15;
    END;
    END_EXEC;
    改为:        
     
             EXEC SQL EXECUTE
    DECLARE
    iTmp int;
    BEGIN 
    iTmp:=15;
    END;
    END-EXEC;
      

  4.   

    你把
    #include "sqlca.h"
    换成
    exec sql include sqlca;
    试一下
      

  5.   

    另外,嵌入有pl/sql的pro*c编译和普通的Pro*c不太一样。
    把你的编译过程说一下
      

  6.   

    我用的是pro*c 8.1.6版本.
    在编译环境菜单中选的是:defualt output file name c++(大概是这样写的英语);
    在 edit(菜单)->option中,我只把code(标题)中的code选项由默认的ANSI_C改成了CPP,其他的都是默认值;
    再就是吧输出文件名的后缀由c改成了cpp.
    就这些.编译不出来.pro*c的编译信息其烂,直接叫人摸不着头脑.:(
      

  7.   

    设置SQLCHECK=SEMANTICS
    如果是win2000,具体在  编辑-->选项--〉sql检查 里面设置
      

  8.   

    设置SQLCHECK=SEMANTICS
    如果是win2000,具体在  编辑-->选项--〉sql检查 里面设置
      

  9.   

    proc SQLCHECK=FULL USERID=user/password iname=$1.pc define=__DECC code=ANSI_C 
    在unix/linux下是这样编译的。windows下我没有嵌入过pl/sql。
    你把相应的参数改一下,看看行不行。
      

  10.   

    这么多人帮我,我很感激.上面的方法我一一试过了.可是...... 
    我现在的环境是 win nt 4.0 sp5   Oracle 8.1.6  pro*c 8.1.6
    或许是不是我的系统有问题???
    这样吧,大家谁能给我一个经过验证能够编译通过并且能够正确执行的,pro*c中嵌入 pl/sql语句的简单例子?
      

  11.   

    SQL> desc sgj
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OLD     
    SQL> select * from sgj;no rows selected/*test.pc */
    exec sql include sqlca;
    int main()
    {
      exec sql begin declare section;
      char user[10];
      char pwd[10];
      exec sql end   declare section;
      strcpy(user,"ych");
      strcpy(pwd,"ych");
      exec sql connect :user identified by :pwd;
      exec sql execute
        begin
          insert into sgj values('22');
        end;
      end-exec;
      exec sql commit release;
      printf("ok!\n");
      exit(0);
    }
    $proc SQLCHECK=FULL
    USERID=sgj/sgj test.pc 
    $gcc -L/export/home/OraHome/lib/ -lclntsh test.c  
    $./a.out
       ok!                             
    SQL> select * from sgj;       OLD
    ----------
            22