天天看点

ORA-00932: 数据类型不一致: 应为 -,但却获得 -

由于业务需要在存储过程中声明了一个记录数据类型 RE_TABLE,如下:

--声明记录数据类型
TYPE RE_TABLE IS RECORD(
    ID VARCHAR(32),
    PRIMARY_DEVICE_NAME(32),
    COMPANY_NAME (32)
    );
 --声明了一个基于弱类型游标的变量
 re_row RE_TABLE ;
           

下面是声明游标并使用:

declare
	v_sql varchar(1000);
    --声明游标类型为动态游标
    type cur_info is ref cursor;
begin
	 v_sql :=  'SELECT SYS_GUID() ID,
                       t1.DEVICE_NAME DEVICE_NAME ,
                       t1.PRIMARY_DEVICE_NAME PRIMARY_DEVICE_NAME,
                       t1.COMPANY_NAME COMPANY_NAME 
                      FROM CA_DEVICE T1
                     INNER JOIN CA_FL_ASSET T2
                        ON T2.ASSET_ID = T1.ID
                     INNER JOIN CA_FUNCTION_LOCATION T3
                        ON T3.ID = T2.FUNCTION_LOCATION_ID
                     INNER JOIN CA_CLASSIFY T4
                        ON T4.ID = T1.CLASSIFY_ID
                     WHERE T1.DEVICE_NAME = ''2号机械设备'' ';
     --打开游标
 	 open cur_info for v_sql ;
	 loop
	      fetch cur_info into re_row;
	     	 exit when cur_info%notfound;
	     	 --计数
	     	 counter := counter + 1
	      end loop;
	 close cur_info ;
end;
           

编译存储过程没有报错,但执行却报 ’‘ORA-00932: 数据类型不一致: 应为 -,但却获得 -’‘ 错误。

出错原因:自己太大意了,在声明记录数据类型时,遗漏掉一个字段DEVICE_NAME。

解决:声明记录数据类型RE_TABLE 时加上遗漏掉的字段声明DEVICE_NAME VARCHAR(32)。

TYPE RE_TABLE IS RECORD(
    ID VARCHAR(32),
    -- 声明遗漏掉的字段
    DEVICE_NAME VARCHAR(32),
    PRIMARY_DEVICE_NAME(32),
    COMPANY_NAME (32)
    );
 RE_ ROW RE_TABLE ;
           

成功解决问题ORA-00932问题!