如何从PL SQL中的函数返回一个值

时间:2014-04-02 18:56:10

标签: sql function select oracle11g

我想创建一个通过传递用户名和密码来查询用户表的函数,如果用户名/密码正确则该函数返回'Y',如果不是,则返回'N'。< / p>

将返回值初始化为“N”,然后使用SQL%FOUND检查函数是否找到匹配项,以便为返回变量赋予“Y”。

我收到以下错误:06503. 00000 - “PL / SQL:函数返回没有值”

CREATE OR REPLACE FUNCTION VERIFY 
                 ( userName IN VARCHAR2, 
                   userPassword VARCHAR2
                 )
              RETURN VARCHAR2
AS
returnVar VARCHAR2(1):='N';
userID number;
zip number;
BEGIN
  SELECT userId,SUBSTR(ZIPCODE, 1,3)
   INTO userID,zip
  FROM users
   WHERE username = userName AND PASSWORD = userPassword;
 if SQL%FOUND then
   returnVar:='Y';
 end if;
  return returnVar;
 EXCEPTION
    WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
 END VERIFY;

注意:如果你想知道为什么我选择了userID和zip:当函数正常工作并经过测试时,我会将它包含在一个包中,以便使userID和Zip Code全局可用,这是一个要求我正在进行的运动。

1 个答案:

答案 0 :(得分:1)

我认为您的问题位于异常块中。

如果发生异常,则不返回任何内容。

在异常块的末尾插入例如RETURN returnVar;,以便在发生异常时返回默认值。