2

我在执行 Oracle 函数时遇到问题。我有一张桌子loginfo(username,password,type),我有这样的功能:

CREATE OR REPLACE FUNCTION login(name in varchar2,pass in varchar2 )
    RETURN integer
    IS 
    v_type integer;
    BEGIN 
    Select loginfo.type 
    INTO v_type from loginfo
    where loginfo.username=name 
    and loginfo.password=pass;
    RETURN (v_type); 
    END;

我有两种类型的日志信息;类型 1 和 2。如果我从 php 调用这个函数,并带有一个应该返回类型 1 的参数。当我使用应返回类型 2 的参数调用此函数时,它会OCI_NO_DATA在 PHP 页面中返回错误。但是,当我从 Oracle 调用函数时,它返回 2。

当我的参数是username = '8801716560946'and时,它应该返回类型 2 password = '123456'

4

2 回答 2

2

OCI_NO_DATA表示没有与您在表中传入的参数匹配的行。我敢打赌,当您从 PHP 调用该函数时,您传递了不同的参数。例如,也许您在一种情况下传递带有一些额外空格的字符串,而不是另一种情况。

于 2012-04-04T20:56:51.977 回答
0

您应该在代码中添加一些异常处理程序。

CREATE OR REPLACE FUNCTION login(name in varchar2,pass in varchar2 ) RETURN integer IS 
  v_type integer;
BEGIN      
Select loginfo.type 
INTO v_type from loginfo
where loginfo.username=name 
and loginfo.password=pass;
RETURN (v_type); 
 exception when no_data_found then 
    return null;
END;

这样你就可以保证函数返回一个值。在生产环境中,您还希望使用包,因为它们有很多优点。

于 2012-06-13T15:35:34.420 回答