2016-04-08 4 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, все время вводить ли я правильный идентификатор и имя или неправильно.

Вот я называю эту процедуру

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 и т. Д., Тогда вы можете распечатать значения и запрос на экране. Выполните тот же запрос, сгенерированный в вашей процедуре, на ваш db. Вы получите свой собственный ответ. –

ответ

1

Попытайтесь использовать ВЕРХНЕЙ стороной обе стороны, поэтому, если есть какие-либо чувствительные к регистру имена, это аннулирует ее.

SELECT COUNT (*) в p_count от клиента WHERE upper (name) = upper (p_name_in) И id = p_id;

+0

Я даю правильное имя в базе данных. – Asad

+1

У вас проверены ли для имени и имени пробелы ведущие и конечные пробелы? –

1

Возможно, вы ошиблись, когда вы установили id с значением password?

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); 

Другая возможность Ваш идентификатор/пароль хранится в зашифрованном вещь?