Gracias por la respuesta. Probé aquí y tuve que hacer una modificación: ifnull debe ser compatible con el tipo de parámetro.
( a.att2 es null y ifnull(vb, 0) = 0)
Avalados por :
Necesito recuperar un registro utilizando un cursor cuyo valor es nulo, sin embargo, al pasar este parámetro al cursor, el registro buscado no se devuelve.
El código a continuación muestra un ejemplo. Se observa el mismo comportamiento cuando solo se pasa la primera columna como parámetro del 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;
-- devuelve 'not found'
call prc_testenulo();
¿Cuál sería la forma de consultar datos nulos utilizando cursores en SQL Script?
Gracias por la respuesta. Probé aquí y tuve que hacer una modificación: ifnull debe ser compatible con el tipo de parámetro.
( a.att2 es null y ifnull(vb, 0) = 0)
Comparar con un "=" contra Null no tiene efecto. Se debe usar IS NULL para la comparación. Una opción a considerar es algo como lo siguiente:
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