Bulk Collect中的别名给出未实现功能的错误

时间:2016-02-29 17:24:18

标签: plsql

问题陈述:用户将指定一个名称,根据该名称,我必须从表中提取两个表的名称,然后从这些表中提取值。我已经为此创建了一个pl / sql过程,因为select查询我可以使用Bulk Collect返回n行数。我已根据要提取的字段创建并对象。现在的问题是列在两个表中都很常见,所以如果我不使用别名,我会得到模糊的列错误,如果我使用它,我会得到未实现功能的错误。

这是我的代码:

create or replace type recon_obj_vib 
is object (RECON_TABLE_KEY NUMBER(19)
,RECON_CHGLOGATTR_IDXLST  VARCHAR2(1000 CHAR));

create or replace type recon_tab_vib
is table of recon_obj_vib;

create or replace PROCEDURE noMatchReport_proc(tableDesc IN VARCHAR2)
IS
l_recon_tab_vib recon_tab_vib := recon_tab_vib();
n Integer :=0;
out varchar2(2000);
tableName1  varchar2(25);
tableName2 varchar2(25);
tableDesc_without_space varchar2(25);
tableDesc_ra varchar2(25);

BEGIN
 tableDesc_without_space:=Regexp_Replace(tableDesc,'\s');
 tableDesc_ra:=UPPER('RA_' || tableDesc_without_space || ' %');
 out:= 'Select recon_table_name from recon_tables where recon_table_desc = (:value) and rownum=1 and RECON_TABLE_name like (:userName)';
 execute immediate out into tableName1 USING tableDesc,tableDesc_ra;
 out:= 'Select recon_table_name from recon_tables where recon_table_desc = (:value) and rownum=1 and RECON_TABLE_name  not like (:userName)';
  execute immediate out into tableName2 USING tableDesc,tableDesc_ra;
  out:='Select a.RECON_TABLE_KEY,a.RECON_CHGLOGATTR_IDXLST BULK COLLECT INTO  l_recon_tab_vib from ' || tableName1  || ' a , ' || tableName2 ||  ' b where a.RE_KEY = b.RE_KEY and rownum=1';
  execute immediate out into l_recon_tab_vib;
  FOR i IN 1..l_recon_tab_vib.COUNT 
   LOOP
    DBMS_OUTPUT.PUT_LINE('RECON_TABLE_KEY '||     l_recon_tab_vib(i).RECON_TABLE_KEY ||' RECON_CHGLOGATTR_IDXLST ' || l_recon_tab_vib(i).RECON_CHGLOGATTR_IDXLST );
   END LOOP;
END;

1 个答案:

答案 0 :(得分:0)

这部分:

out:='Select a.RECON_TABLE_KEY,a.RECON_CHGLOGATTR_IDXLST BULK COLLECT INTO   l_recon_tab_vib from ' || tableName1  || ' a , ' || tableName2 ||  ' b where a.RE_KEY = b.RE_KEY and rownum=1';
execute immediate out into l_recon_tab_vib;

应该是:

out:='Select a.RECON_TABLE_KEY,a.RECON_CHGLOGATTR_IDXLST from ' 
     || tableName1  || ' a , ' || tableName2
     ||  ' b where a.RE_KEY = b.RE_KEY and rownum=1';
execute immediate bulk collect into l_recon_tab_vib;

即。 BULK COLLECT INTO子句是调用PL / SQL的一部分,而不是动态SQL的一部分。