OCI НЕТ ДАННЫХ oci8 ошибка oracle


У меня проблема с выполнением функции 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;

У меня есть два типа loginfo; тип 1 и 2. Если я вызову эту функцию из php с параметром, который должен возвращать тип 1, это произойдет. Когда я вызываю эту функцию с параметром, который должен возвращать тип 2, она возвращает ошибку OCI_NO_DATA на странице PHP. Однако, когда я вызываю функцию из Oracle, она возвращает 2.

Он должен возвращать тип 2, когда мои параметры username = '8801716560946' и password = '123456'.

Author: Ben, 2012-04-05

2 answers

OCI_NO_DATA подразумевает, что в таблице нет строк, соответствующих переданным вами параметрам. Держу пари, что вы передаете разные параметры при вызове функции из PHP. Возможно, вы передаете строки с некоторыми дополнительными пробелами в одном случае, а не в другом, например.

 2
Author: Justin Cave, 2012-04-04 20:56:51

Вам следует добавить в свой код какой-нибудь обработчик исключений.

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;

Таким образом, вы гарантированно получите значение, возвращаемое функцией. В производственной среде вы также хотите использовать пакеты, так как у них много преимуществ.

 0
Author: Seb, 2012-06-13 15:35:34