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

时间:2015-04-01 10:57:57

标签: sql oracle 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是为该记录类型定义的列

任何人都可以告诉我如何能够超越结果。

1 个答案:

答案 0 :(得分:1)

我希望您在使用简单查询获得结果时不使用cursor,您可以使用join函数获得下面substr下面提到的结果:

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)

编辑:(在评论和编辑问题之后)如果您没有特定的连接公式或模式,并且您希望仅在记录数量的基础上加入它们,那么请使用{{ 1 {} rownum内:

subquery