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;

2 種類のログ情報があります。タイプ1と2。タイプ1を返す必要があるパラメーターを使用してphpからこの関数を呼び出すと、それは実行されます。タイプ 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 に答える