2016-04-08 14 views
0

ストアドプロシージャは、期待している値を返していません。私はその手順の問題が何か分かっていませんでした。ここで期待値を返さないストアドプロシージャ

は手順です:

CREATE OR REPLACE procedure PRC_CUSTOMER_WITH_LOGIN 
    (p_name_out out varchar2, 
    p_count out int, 
    p_all_records out SYS_REFCURSOR, 
    p_mode in varchar2, 
    p_id in varchar2, 
    p_name_in in varchar2, 
    p_contact_no in varchar2, 
    p_email in varchar2, 
    p_address in varchar2) 
IS 
BEGIN 
IF p_mode='q' 
THEN 
    select NAME into p_name_out from customer where id='1'; 
ELSIF p_mode='i' 
THEN 
    INSERT into customer(id,name,contactNo,email,address) 
    Values(p_id, p_name_in, p_contact_no , p_email , p_address); 
ELSIF p_mode='u' 
THEN 
    UPDATE customer set name=p_name_in, contactNo=p_contact_no, email=p_email, address=p_address 
    where id=p_id; 
ELSIF p_mode='d' 
THEN 
    DELETE from customer where id=p_id; 
ELSIF p_mode='a' 
THEN 
    OPEN p_all_records FOR 
     select * from customer; 
ELSIF p_mode='l' 
THEN 
    SELECT COUNT(*) into p_count from customer WHERE name=p_name_in AND id=p_id; 
END IF; 
END; 
/

これは、他のすべての条件が正常に動作しているが、最後の条件は、この条件の戻り0正しく、私が正しいIDと名前を入力するかどうか、すべての時間を働いていない手順であります違う。

ここで私は、誰かがミスが、私はここで作ってるんだということが何であるかを教えてもらえます?

cs = (OracleCallableStatement) con.prepareCall("{call TESTDB.PRC_CUSTOMER_WITH_LOGIN(?,?,?,?,?,?,null,null,null)}"); 
      cs.registerOutParameter(1, OracleTypes.VARCHAR); 
      cs.registerOutParameter(2, OracleTypes.INTEGER); 
      cs.registerOutParameter(3, OracleTypes.CURSOR); 
      cs.setString(4, "l"); 
      cs.setString(5, password); 
      cs.setString(6, name); 

      cs.executeQuery(); 
      chk=cs.getInt(2); 
      System.out.println(chk); 

このプロシージャを呼び出していますか私は感謝しています.... :)

+1

コードをデバッグすることができます。もしあなたがヒキガエル、SQLデベロッパーなどのツールを持っていなければ、画面上で値とクエリを印刷することができます。プロシージャで生成された同じクエリをデータベースに起動します。あなたはあなた自身の答えを得るでしょう。 –

答えて

1

大文字と小文字を区別するような名前があれば、それを無効にします。

顧客からのp_countにSELECT COUNT(*)を入れます。upper(name)= upper(p_name_in)AND id = p_id;

+0

私は正しい名前をデータベースに与えています。 – Asad

+1

名前の先頭と末尾のスペースを確認しましたか? –

1

idpasswordの値を設定すると間違っているかもしれませんか?

1-> p_name_out out varchar2, 
2-> p_count out int, 
3-> p_all_records out SYS_REFCURSOR, 
4-> p_mode in varchar2, 
5-> p_id in varchar2,  --- 5 is id, not password ??!? 
6-> p_name_in in varchar2, 
p_contact_no in varchar2, 
p_email in varchar2, 
p_address in varchar2 

cs = (OracleCallableStatement) con.prepareCall(
"{call TESTDB.PRC_CUSTOMER_WITH_LOGIN(?,?,?,?,?,?,null,null,null)}"); 
     cs.registerOutParameter(1, OracleTypes.VARCHAR); 
     cs.registerOutParameter(2, OracleTypes.INTEGER); 
     cs.registerOutParameter(3, OracleTypes.CURSOR); 
     cs.setString(4, "l"); 
     cs.setString(5, password); 
     cs.setString(6, name); 

別の可能性は、暗号化されたものとして保存され、あなたのID /パスワードのですか?

関連する問題