Plsql 在循环中使用数组元素的pl/sql给出ORA-01722错误

Plsql 在循环中使用数组元素的pl/sql给出ORA-01722错误,plsql,ora-01722,Plsql,Ora 01722,我写了下面的脚本,在第8行我得到了ORA-01722错误。如何解决此错误?提前谢谢 declare type array_t is varray(2) of VARCHAR2(20); array array_t := array_t('5634', '5764'); begin for i in 1..array.count loop execute immediate 'select t.musteri_id from tms.isemri t wher

我写了下面的脚本,在第8行我得到了ORA-01722错误。如何解决此错误?提前谢谢

declare 
  type array_t is varray(2) of VARCHAR2(20);
  array array_t := array_t('5634', '5764');

 begin

  for i in 1..array.count loop   
      execute immediate 'select t.musteri_id from tms.isemri t where t.isemri_tarihi  = (select max(t.isemri_tarihi) from tms.isemri t where t.hizmet_no = '|| 
      array(i)||') and t.hizmet_no ='|| array(i);   

  end loop;
  end;

连接的SQL将如下所示:

select t.musteri_id from tms.isemri t where t.isemri_tarihi =
(select max(t.isemri_tarihi) from tms.isemri t where t.hizmet_no = 5634)
and t.hizmet_no = 5634
请注意,值5634是一个数字而不是字符串,这会导致Oracle将hizmet_no强制转换为一个数字,这并不总是有效的

您应该使用绑定变量,这将解决此问题:

declare 
  type array_t is varray(2) of VARCHAR2(20);
  array array_t := array_t('5634', '5764');
  l_musteri_id tms.isemri.musteri_id%type
 begin

  for i in 1..array.count loop   
      execute immediate 'select t.musteri_id from tms.isemri t 
                         where t.isemri_tarihi  = (select max(t.isemri_tarihi)
                                                   from tms.isemri t
                                                   where t.hizmet_no = :val1)
                         and t.hizmet_no = :val2'
       into l_musteri_id
       using array(i), array(i);   

  end loop;
  end;

立即执行“从tms.isemri t中选择t.musteri_id,其中t.isemri_tarihi=从tms.isemri t中选择maxt.isemri_tarihi,其中t.hizmet_no=”|
arrayi | |和t.hizmet | no=| | arrayi | |

你不也需要一个选择进入吗?