Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查plsql中的记录是否不为空_Plsql_Notnull - Fatal编程技术网

检查plsql中的记录是否不为空

检查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

我有一个函数,它将返回一个类型为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; 结束我的功能;
谢谢。

据我所知,这是不可能的。不过,检查主键或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属性带来的一些便利和安全。如果这样做,您还可以定义记录,并手动选择每个记录。