plsql - sintaxis - pl sql where null
Compruebe que un registro NO ES NULO en plsql (2)
No se puede probar la no existencia de esta variable, por lo que hay dos formas de hacerlo. Verificar la existencia de un solo elemento. No me gusta esto porque significa que si algo cambia, tu código ya no funciona. En su lugar, ¿por qué no solo generar una excepción cuando no hay datos allí?
Me doy cuenta de que los others
en la excepción son muy traviesos, pero solo lograrán que mi mesa desaparezca cuando no debería y nada más.
v_record my_table%ROWTYPE;
v_row_id my_table.row_id%TYPE := 123456;
begin
v_record := myfunction(v_row_id)
exception when others then
-- do something
end;
function myfunction(p_row_id in my_table.row_id%TYPE) return my_table%ROWTYPE is
v_record_out my_table%ROWTYPE := null;
cursor c_record_out(c_row_id char) is
select *
from my_table
where row_id = p_row_id;
begin
open c_record_out(p_row_id);
fetch c_record_out into v_record_out;
if c_record_out%NOTFOUND then
raise_application_error(-20001,''no data);
end if;
close c_record_out;
return v_record_out;
end myfunction;
Tengo una función que devolvería un registro con el tipo my_table%ROWTYPE
, y en la persona que llama, podría verificar si el registro devuelto es nulo, pero PL / SQL se queja de la declaración if
PLS-00306: número incorrecto o tipos de argumentos en la llamada a ''IS NOT NULL''
Aquí está mi código:
v_record my_table%ROWTYPE;
v_row_id my_table.row_id%TYPE := 123456;
begin
v_record := myfunction(v_row_id)
if (v_record is not null) then
-- do something
end if;
end;
function myfunction(p_row_id in my_table.row_id%TYPE) return my_table%ROWTYPE is
v_record_out my_table%ROWTYPE := null;
begin
select * into v_record_out from my_table
where row_id = p_row_id;
return v_record_out;
end myfunction;
Gracias.
Por lo que yo sé, no es posible. Sin embargo, PRIMARY KEY
o una columna NOT NULL
debería ser suficiente.
Puede verificar que v_record.row_id IS NULL
.
Su función lanzaría una excepción NO_DATA_FOUND
, sin embargo, cuando no se encuentra ningún registro.