[65000][6550] ORA-06550: 第 11 行, 第 23 列: PLS-00382: 表达式类型错误

新手上路,请多包涵

DECLARE
cursor outs is
SELECT SID ,PUNISH_KIND,PUNISH_KIND_NAME FROM SUVISION_SITUATION WHERE sid='b145774a-0084-4f3e-9cd2-4758458e8f71';
cursor ins is
select COLUMN_VALUE from table(split_string('0,6,3',','));
temp varchar2(100);
BEGIN FOR one_out IN outs LOOP
for one_ins in ins LOOP
SELECT decode(one_ins,'7','警告','0','罚款','6','没收违法所得','1','责令停产停业','2','暂扣或吊销许可证','5','行政拘 留','3','法律、行政法规规定的其他行政处罚','') AS STR INTO temp FROM DUAL;
SYS.DBMS_OUTPUT.PUT_LINE(temp||',');

       end loop ; 
       update SUVISION_SITUATION  
          set PUNISH_KIND_NAME= temp  
         where SID = one_out.SID;  

commit;
end loop;
end;

现在一直提示65000 ORA-06550: 第 11 行, 第 23 列: PLS-00382: 表达式类型错误,问题位置是decode后的参数one_ins,请问这个one_ins应该如何取值?我应该如何取出one_ins所代表的字段的字符串?

阅读 3.4k
2 个回答

你需要声明一个记录类型来接收游标的值

one_ins ins%ROWTYPE;
for one_ins in ins LOOP

再把这个记录作为实参就可以了

新手上路,请多包涵

decode写的有问题。百度decode的用法 或者你可以用case when

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题