Plsql 在循环中使用数组元素的pl/sql给出ORA-01722错误
我写了下面的脚本,在第8行我得到了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
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 | | 你不也需要一个选择进入吗?