检查plsql中的记录是否不为空
我有一个函数,它将返回一个类型为my_table%ROWTYPE的记录,在调用者中,我可以检查返回的记录是否为null,但PL/SQL会向if语句抱怨 PLS-00306:调用“IS NOT NULL”时参数的数量或类型错误 这是我的密码: v_记录我的_表%ROWTYPE; v_row_id my_table.row_id%类型:=123456; 开始 v_记录:=myfunctionv_行\u id 如果v_记录不为空,则 -做点什么 如果结束; 终止 函数myfunctionp_row_id在my_表中。row_id%TYPE返回my_表%ROWTYPE为 v_record_out my_表%ROWTYPE:=null; 开始 从my_表中选择*into v_record_out 其中row_id=p_row_id; 返回v_记录_out; 结束我的功能;检查plsql中的记录是否不为空,plsql,notnull,Plsql,Notnull,我有一个函数,它将返回一个类型为my_table%ROWTYPE的记录,在调用者中,我可以检查返回的记录是否为null,但PL/SQL会向if语句抱怨 PLS-00306:调用“IS NOT NULL”时参数的数量或类型错误 这是我的密码: v_记录我的_表%ROWTYPE; v_row_id my_table.row_id%类型:=123456; 开始 v_记录:=myfunctionv_行\u id 如果v_记录不为空,则 -做点什么 如果结束; 终止 函数myfunctionp_row_i
谢谢。据我所知,这是不可能的。不过,检查主键或NOTNULL列就足够了 您可以检查v_记录。行id为空
但是,当找不到记录时,您的函数将抛出“找不到数据”异常。您无法测试此变量是否不存在,因此有两种方法可以解决此问题。检查是否存在单个元素。我不喜欢这样,因为这意味着如果有任何变化,你的代码将不再工作。相反,为什么不在没有数据的情况下引发异常: 我意识到其他人在例外情况下是非常淘气的,但它只会真正抓住我的桌子消失时,它不应该和别的什么
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;
谢谢你的回答。这是检查记录是否为空的唯一方法吗?我觉得奇怪的是,我们可以为一条记录分配null,但不能检查一条记录是否为null。据我所知,这是不可能的。检查主键或NOTNULL列就足够了。很好的解决方法!我使用NULL赋值来记录,这是进行检查的方法+1在很多情况下,这是一个不错的解决方法,但无论如何,这样做可以避免使用%ROWTYPE属性带来的一些便利和安全。如果这样做,您还可以定义记录,并手动选择每个记录。