cognos8.1
oracle 10.2.0.1
CREATE OR REPLACE PROCEDURE sp_veh_vip_list_update_jn
(
is_vip_name in varchar2,
v_stat_list out SYS_REFCURSOR
)
AS
-------------------------------------------------脱保备注---------------------------------------------
--
--vs_msg VARCHAR2(4000); --错误信息变量
vs_sql_str varCHAR2(4000);
vs_vip_name varchar2(400);
vs_count int;
begin
----第一步--处理变量
vs_vip_name:=trim(is_vip_name);
if length(vs_vip_name)<2 then
os_sql:='客户的名称出现错误,不能添加!';
open v_stat_list for select os_sql,vs_vip_branch_cname as vip_branch_name from dual;
return;
end if;
---2.1---插入成因表
vs_sql_str:='insert into vip_code_jn(vip_name)
values('''||vs_vip_name||''')';
execute immediate vs_sql_str ;
--------------------------------------------------------------
--判断是否添加成功
-------------------------------------------------------------------
os_sql :='客户的信息已经添加,维护完毕!';
open v_stat_list for select os_sql,vs_vip_name from dual;
-----------------------------------------------------------over------------------------------------------------------------------
-- DBMS_OUTPUT.put_line('ins当月记录='||SQL%rowcount||'条');
COMMIT;
exception
when others then
--vs_msg := 'ERROR IN xxxxxxxxxxx_p(''):'||SUBSTR(SQLERRM,1,500);
dbms_output.put_line(vs_sql_str);
dbms_output.put_line(SQLERRM);
---如果回滚,需要清除本次插入记录
--open v_stat_list for 'select '''||sqlcode||''' msg from dual';
--os_sql :=vs_sql_str;
--||vs_sql_str1||vs_sql_str2||SUBSTR(SQLERRM,1,500);
--||vs_sql_str1||vs_sql_str2||SUBSTR(SQLERRM,1,500);
ROLLBACK;
end sp_veh_vip_list_update_jn;
由于必须以结果集返回结果,所以要用游标。
如果有判断,返回结果可能不一致,从而导致UDA-SQL-0283。
要解决这个,就必须要求在返回结果处返回的结果是统一类型与长度。
fm里query object在创建存储过程返回结果对应的结构应该是以第一次测试返回的结果进行匹配的,后续的返回值如果与保存的结构不一致,就会报错。
阅读(2155) | 评论(0) | 转发(0) |