----- Original Message ----- 
From: "Tom Lane" <[EMAIL PROTECTED]>
> Neil Conway <[EMAIL PROTECTED]> writes:
> > On Fri, 2003-01-10 at 20:28, Tom Lane wrote:
> >> Clearly, RETURN NEXT with an undefined record variable shouldn't dump
> >> core, but what should it do? Raise an error, or perhaps be a no-op?
> 
> > I'd vote for making it a no-op. Raising an error is too severe for a
> > fairly routine occurence, IMHO. If we make it a no-op, it's consistent
> > with how I understand a SELECT INTO of 0 rows -- it doesn't produce an
> > "undefined value", but an "empty result set" (like the difference
> > between "" and a NULL pointer).
> 
> There's a consistency issue here, though.  If the SELECT INTO target
> is non-record variable(s), the behavior is to set them to NULL.  Then
> if you do RETURN NEXT on that, you'd emit a row full of NULLs.
> 
> It seems inconsistent that SELECT INTO a record variable produces an
> undefined result rather than a row of NULLs, when there are no rows
> in the SELECT result.  This would be an easy change to make, I think.
> We do have a tupledesc available for the SELECT, we're just not using
> it.
> 
> Does Oracle's PL/SQL have a concept of record variables?  If so, what
> do they do in this situation?

In Oracle 8, a row of NULLs:

  1  CREATE OR REPLACE FUNCTION foo(t IN NUMBER)
  2  RETURN NUMBER
  3  IS
  4   emp_rec employees%ROWTYPE;
  5  BEGIN
  6   SELECT employees.* INTO emp_rec
  7   FROM employees
  8   WHERE employees.id = t;
  9   RETURN(emp_rec.id);
 10* END;
SQL> /

Function created.

SQL> select * from employees;

no rows selected

SQL> insert into employees values (1, 'Mike');

1 row created.

SQL> select foo(1) from dual;

    FOO(1)
----------
         1

SQL> select foo(2) from dual;

    FOO(2)
----------


SQL> select nvl(foo(2), 0) from dual;

NVL(FOO(2),0)
-------------
            0

Mike Mascari
[EMAIL PROTECTED]






---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to