代码如下:
int db_insert(char *eq_guid, char *unit, char *type, char *time, int status, float value)
 {
     EXEC SQL INCLUDE sqlca;
 //  EXEC SQL BEGIN DECLARE SECTION;
 //  char *guid = eq_guid;
 //  char *t_unit = unit;
 //  char *t_type = type;
//  char *t_time = time;
 //  char t_status = status;
//  float t_value = value; 
  //  EXEC SQL END DECLARE SECTION;  
    EXEC SQL EXECUTE
         BEGIN
             P_DATE_RT(eq_guid, unit, type, time, status, value);
           END;
     END-EXEC;
 }编译语句:  proc iname=ora_proc.pc sqlcheck=semantics userid=agelon/agelon123@ORCL报错:Error at line 164, column 14 in file ora_proc.pc
                        P_DATE_RT(eq_guid, unit, type, time, status, value); 
.............1
PLS-S-00201, identifier 'EQ_GUID' must be declared
Error at line 164, column 4 in file ora_proc.pc
                        P_DATE_RT(eq_guid, unit, type, time, status, value); 
...1
PLS-S-00000, Statement ignored
Semantic error at line 163, column 3, file ora_proc.pc:
                BEGIN 
..1
PCC-S-02346, PL/SQL found semantic errors找了很久的错误 还是不知道为什么,请哪个大神帮忙给看看

解决方案 »

  1.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢
      

  2.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢
      

  3.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢但是你insert()传递进来的参数有指针类型的
      

  4.   

    P_DATE_RT(eq_guid, unit, type, time, status, value);中的eq_guid, unit, type, time参数直接使用了db_insert(char *eq_guid, char *unit, char *type, char *time, int status, float value)传递进来的值,都是指针类型,不是char,所以还是参数的问题
      

  5.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢但是你insert()传递进来的参数有指针类型的
    哦哦 不好意思 我表述错了参数类型,分别是:varchar2(50) 、varchar2(50) 、varchar2(50) 、varchar2(50) 、interger、number 
     所以我才传的 指针类型的  
      

  6.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢但是你insert()传递进来的参数有指针类型的
    哦哦 不好意思 我表述错了参数类型,分别是:varchar2(50) 、varchar2(50) 、varchar2(50) 、varchar2(50) 、interger、number 
     所以我才传的 指针类型的  varchar和varchar2(50)没什么区别,本质上都可以理解为char,还是实参与形参类型不一致的问题。最简单的就是你先对指针做取值运算,然后再传值。即:P_DATE_RT(:(*eq_guid), :(*unit), :(*type), :(*time), status, value);
      

  7.   

    非常感谢,我加冒号后编译出错:wrong number or types of arguments in call to 'P_DATE_RT'
    这个P_DATE_RT 方法一共是6个参数,参数类型,分别是:varchar 、varchar 、varchar 、varchar 、interger、number  
    我感觉我传的参数没问题,但是还是报错  谢谢但是你insert()传递进来的参数有指针类型的
    哦哦 不好意思 我表述错了参数类型,分别是:varchar2(50) 、varchar2(50) 、varchar2(50) 、varchar2(50) 、interger、number 
     所以我才传的 指针类型的  varchar和varchar2(50)没什么区别,本质上都可以理解为char,还是实参与形参类型不一致的问题。最简单的就是你先对指针做取值运算,然后再传值。即:P_DATE_RT(:(*eq_guid), :(*unit), :(*type), :(*time), status, value);我尝试用下面的方法结果还是出错:
    int db_insert(char *eq_guid, char *unit, char *type, char *time, int status, float value)
    {
        EXEC SQL INCLUDE sqlca;
        EXEC SQL BEGIN DECLARE SECTION;
        char *guid = &eq_guid;
        char **t_unit = &unit;
        char **t_type = &type;
        char **t_time = &time;
        char t_status = status;
        float t_value = value;    EXEC SQL END DECLARE SECTION;
        EXEC SQL EXECUTE
            BEGIN 
                P_DATE_RT(:(*guid), :(*t_unit), :(*t_type), :(*t_time), :status, :value); 
            END;
        END-EXEC;
    }报错内容:
    Semantic error at line 164, column 15, file ora_proc.pc:
                            P_DATE_RT(:(*guid), :(*t_unit), :(*t_type), :(*t_time), 
    :status, :value); 
    ..............1
    PCC-S-02322, found undefined identifier
                            P_DATE_RT(:(*guid), :(*t_unit), :(*t_type), :(*t_time), 
    :status, :value); 
    ................1
    PLS-S-00103, Encountered the symbol ":" when expecting one of the following:   ( ) - + case mod new not null others <an identifier>
       <a double-quoted delimited-identifier> <a bind variable>
       table avg count current exists max min prior sql stddev sum
       variance execute multiset the both leading trailing forall
       merge year month DAY_ hour minute second timezone_hour
       timezone_minute timezone_region timezone_abbr time timestamp
       interval date
       <a string literal with character set specification>
       <a number> <a single-quoted SQL string> pipe
       <an alternatively-quoted string literal with character set specification>
       <an alternatively-quoted SQL string>Semantic error at line 163, column 3, file ora_proc.pc:
                    BEGIN 
    ..1
    PCC-S-02347, PL/SQL found syntax errors
      

  8.   

    char *guid = &eq_guid;
    char **t_unit = &unit;
    char **t_type = &type;
    char **t_time = &time;
    你这些定义都是有问题,建议你先看看C的指针部分,彻底把指针理解清楚了。我不知道你想传递什么数据,类型上,下面这么写应该是没问题的:int db_insert(char *eq_guid, char *unit, char *type, char *time, int status, float value)
    {
        EXEC SQL INCLUDE sqlca;
        EXEC SQL BEGIN DECLARE SECTION;
        //char *guid = &eq_guid;
        //char **t_unit = &unit;
        //char **t_type = &type;
        //char **t_time = &time;
        //char t_status = status;
        //float t_value = value;    EXEC SQL END DECLARE SECTION;
        EXEC SQL EXECUTE
            BEGIN 
                P_DATE_RT(:(*eq_guid), :(*unit), :(*type), :(*time), :status, :value); 
            END;
        END-EXEC;
    }另外,你的函数是有返回值得吗,如果没有需要用void定义insert函数
      

  9.   

    你试试这样呢,
    int db_insert(char *eq_guid, char *unit, char *type, char *time, int status, float value)
    {
        EXEC SQL INCLUDE sqlca;
        EXEC SQL BEGIN DECLARE SECTION;
        char t_guid = *eq_guid;
        char t_unit = *unit;
        char t_type = *type;
        char  t_time = *time;
        int t_status = status;
        float t_value = value;
     
        EXEC SQL END DECLARE SECTION;
        EXEC SQL EXECUTE
            BEGIN 
                P_DATE_RT(:t_guid , :t_unit , :t_type , :t_time , :t_status , :t_value ); 
            END;
        END-EXEC;
    }
      

  10.   

    你参考一下我的这个吧,有问题了再继续留言
    http://blog.csdn.net/smallboy_5/article/details/3044255