在plsql代码中使用两个游标时出错



我有两个表ERROR_DESCRIPTION和ERROR_COLUMN。

ERROR_DESCRIPTION有以下数据:
"处理列a_type时出错"
"处理列a_type时出错"
"错误处理列a_type"

ERROR_COLUMN具有以下数据:
"abc",123334,"jdjjd"
"jdjd",2344,"djjd"
"djjd",234,"kkfkf"

最后我的数据应该是这样的:

处理列a_type时出错-"abc",123334,"jdjjd"
错误处理列a_type-"jdjd",2344,"djjd"

等等。。。

"a_type"是ERROR_column表中的列名

我正在尝试使用游标来实现这一点。

declare    
cursor c_log is  select * from ERROR_DESCRIPTION where error_data_log like'error%' ORDER BY error_data_log;   
r_log ERROR_DESCRIPTION %ROWTYPE;   
v_error varchar2(1000);    
cursor c_dsc is select * from ERROR_COLUMN;
r_dsc ERROR_COLUMN%ROWTYPE;
begin 
 open c_log;    
loop    
     fetch c_log into v_error;      
     open c_dsc ;    
          fetch c_dsc into r_dsc     
          dbms_output.put_line( 'error is'||v_error||'-'||r_dsc.xyz);
 close c_dsc ;

end loop;   
close c_log;   
end ;

我没能得到想要的结果。

r_dsc.xyz是为该记录类型定义的列

谁能告诉我怎样才能得到以上结果吗。

当你可以通过简单的查询获得结果时,我建议你不要使用cursor,你可以使用substr函数获得下面提到的join的结果:

select d.val || substr(d.val,24) || c.val2 || c.val3
from ERROR_DESCRIPTION d
join ERROR_COLUMN c on substr(d.val,24)=c.val1

根据您提供的样本数据,假设您的结构为:ERROR_DESCRIPTION(val)ERROR_COLUMN(val1,val2,val2)

编辑:(在评论和编辑问题之后)如果您没有特定的加入公式或模式,并且您只想根据记录数量加入它们,则在subquery:中使用rownum

select d.val || '-' || c.val1,c.val2,c.val3
from (select rownum rn,val from ERROR_DESCRIPTION) d
join (select rownum rn,val1,val2,val3 from ERROR_COLUMN) c
on d.rn=c.rn

最新更新