由于业务需要在存储过程中声明了一个记录数据类型 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问题!