在 plsql 代码中使用两个游标时出错
error using two cursors in plsql code
我有两个 tables ERROR_DESCRIPTION 和 ERROR_COLUMN.
ERROR_DESCRIPTION has below data :
"error processing column a_type"
"error processing column a_type"
"error processing column a_type"
ERROR_COLUMN has below data:
"abc",123334,"jdjjd"
"jdjd",2344,"djjd"
"djjd",234,"kkfkf"
最后我的数据应该是这样的:
error processing column a_type -"abc",123334,"jdjjd"
error processing column a_type - "jdjd",2344,"djjd"
等等...
"a_type" 是来自 ERROR_COLUMN table
的列名
我正在尝试使用游标来实现此目的。
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
我有两个 tables ERROR_DESCRIPTION 和 ERROR_COLUMN.
ERROR_DESCRIPTION has below data :
"error processing column a_type"
"error processing column a_type"
"error processing column a_type"ERROR_COLUMN has below data:
"abc",123334,"jdjjd"
"jdjd",2344,"djjd"
"djjd",234,"kkfkf"
最后我的数据应该是这样的:
error processing column a_type -"abc",123334,"jdjjd"
error processing column a_type - "jdjd",2344,"djjd"
等等...
"a_type" 是来自 ERROR_COLUMN table
的列名我正在尝试使用游标来实现此目的。
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