validar sintaxis not manejo plsql notnull

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.