Obrigado pela resposta. Eu tentei aqui e tive que fazer uma modificação: ifnull deve ser compatível com o tipo de parâmetro.
( a.att2 é null e ifnull(vb, 0) = 0)
Avalados por :
Preciso recuperar um registro usando um cursor cujo valor é nulo, no entanto, ao passar esse parâmetro para o cursor, o registro procurado não é retornado.
O código abaixo mostra um exemplo. O mesmo comportamento é observado quando apenas a primeira coluna é passada como parâmetro para o cursor.
create table testenulo (att1 nvarchar, att2 integer)
insert into testenulo values ('a', 1);
insert into testenulo values (null, 2);
insert into testenulo values ('c', null);
create or replace procedure prc_testenulo() as
begin
USING SQLSCRIPT_PRINT as lib;
declare cursor c_teste(va nvarchar, vb integer) for
select a.att1, a.att2 from testenulo a
where a.att1 = va and a.att2 = vb;
declare vrow row like :c_teste;
OPEN c_teste(null, 2);
FETCH c_teste INTO vrow;
if(c_teste::NOTFOUND) then
lib:print_line('not found');
else
lib:print_line(:vrow.att1);
end if;
end;
-- retorna 'not found'
call prc_testenulo();
Qual seria a forma de consultar dados nulos usando cursores em SQL Script?
Obrigado pela resposta. Eu tentei aqui e tive que fazer uma modificação: ifnull deve ser compatível com o tipo de parâmetro.
( a.att2 é null e ifnull(vb, 0) = 0)
Comparar com um "=" contra Null não tem efeito. Deve-se usar IS NULL para comparação. Uma opção a considerar é algo como o seguinte:
create or replace procedure prc_testenulo() as
begin
USING SQLSCRIPT_PRINT as lib;
declare cursor c_teste(va nvarchar, vb integer) for
select a.att1, a.att2 from testenulo a
where ( a.att1 = va
or ( a.att1 is null and ifnull(va, 'isNull') = 'isNull')
)
and ( a.att2 = vb
or ( a.att2 is null and ifnull(vb, 'isNull') = 'isNull')
);
declare v_att1 nvarchar;
declare v_att2 integer;
OPEN c_teste(null, 2);
FETCH c_teste INTO v_att1, v_att2;
if(c_teste::NOTFOUND) then
lib:print_line('not found');
else
lib:print_line(:v_att1);
end if;
end;
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute