2014-04-28 5 views
0

사용자 이름과 암호의 입력을 허용하는 절차를 작성했습니다. 성공한 경우 로그인의 시간 소인을 proc해야합니다. 문제는 코드가 & 사용자 이름을 건너 뛰고 코드에서 & 패스 인 다음 사용자 정의 항목으로 이동한다는 것입니다. 이건 내 코드입니다 : ECHO는 켜져 있고 SO SERVEROUTPUT은 BTW입니다무엇을할까요? 내 사용자 정의 입력이 값 입력을 허용하지 않습니다.

create or replace procedure LOGIN_CK_PF 
as 
fname bb_shopper.firstname%type; 
lname bb_shopper.lastname%type; 
uname bb_shopper.username%type; 
pass bb_shopper.password%type; 


begin 

    select firstname, lastname, username, password 
    into fname, lname, uname, pass from bbshop 
    where username=&username; 

    if pass = &pass then 
    dbms_output.put_line(Sysdate); 
    else 
    dbms_output.put_line('Invalid Login'); 
    end if; 

exception 
    when no_data_found then 
    dbms_output.put_line('Invalid Login'); 

end; 
/

이 코드 출력 값의 항목 중 모습입니다 : 그 전체를 복용처럼

Enter value for username: 
old 11: select firstname, lastname, username, 
       password into fname, lname, uname, pass 
      from bbshop 
new 11: select firstname, lastname, username, 
        password into fname, lname, uname, pass 
      from bbshop 

그것은 본다 항목을 항목으로 선택 ??? 특정 라인에 대한 오류는 다음과 같습니다 : 당신은 프로 시저에 전달하는 적절한 PL/SQL 매개 변수를 사용할 필요가

11/2  PL/SQL: SQL Statement ignored 
11/107 PL/SQL: ORA-00936: missing expression 
+0

일반적으로, 그것은 항목으로 전체 선택을하고 있음을 의미하지 않는다. 바인드 매개 변수가 첨부되기 전의 코드 조각을 보여줍니다. 암호 컬럼과 where 절이 선택에서 사라지는 경우에 이상한 점은 무엇입니까? 그리고 3 열을 4 개의 매개 변수로 선택하면이 오류가 발생합니다. 이 산출물이 당신이 당신의 우편물에 제공 한 절차의 호출을 위해 생산되었는지 확신합니까? 어쩌면 당신은 약간의 변화를 만들었 을까요? – Guneli

+0

PL/SQL에는 사용자 입력을 수용 할 수있는 기능이 없습니다. SQL * Plus를 사용하여 스크립트를 실행하고 있습니까? –

+0

저는 실제로 SQL Plus를 사용하고 있습니다. 그러나 사용자 입력이있는 다른 코드에 대해 동일한 프로그램을 사용 했으므로 이상하게 작동했습니다. – Jongu

답변

1

.

CREATE OR REPLACE PROCEDURE LOGIN_CK_PF (P_User IN VARCHAR2, 
             P_Pass IN VARCHAR2) 
AS 
    fname bb_shopper.firstname%TYPE; 
    lname bb_shopper.lastname%TYPE; 
    uname bb_shopper.username%TYPE; 
    pass bb_shopper.password%TYPE; 
BEGIN 
    SELECT firstname, lastname, username, password 
    INTO fname, lname, uname, pass 
    FROM bbshop 
    WHERE username = P_User; 

    IF pass = P_Pass THEN 
     DBMS_OUTPUT.put_line (SYSDATE); 
    ELSE 
     DBMS_OUTPUT.put_line ('Invalid Login'); 
    END IF; 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     DBMS_OUTPUT.put_line ('Invalid Login'); 
END; 

/

+0

잘 작동하지만 사용자 이름과 비밀번호를 직접 입력해야합니다. 문제는 "& 사용자 이름"을 입력 할 때마다 입력 할 수 있습니다. 대신 값이 이미 입력되어 있고 암호 입력 부분으로 건너 뜁니다. – Jongu

+0

도움이되는 경우 sql plus를 사용하는 Im – Jongu

+0

sqlplus에 입력하고 매개 변수로 값을 프로 시저 호출에 전달합니다. PL/SQL은 클라이언트가 아닌 서버에서 실행되며 U/I 구성 요소는 없습니다. 추가 질문이 있으면 설명서를 읽으십시오. – OldProgrammer