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'
.
2 answers
OCI_NO_DATA
подразумевает, что в таблице нет строк, соответствующих переданным вами параметрам. Держу пари, что вы передаете разные параметры при вызове функции из PHP. Возможно, вы передаете строки с некоторыми дополнительными пробелами в одном случае, а не в другом, например.
Вам следует добавить в свой код какой-нибудь обработчик исключений.
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;
Таким образом, вы гарантированно получите значение, возвращаемое функцией. В производственной среде вы также хотите использовать пакеты, так как у них много преимуществ.