2014-04-28 78 views
0

我編寫了一個應該允許輸入用戶名和密碼的過程,如果成功,它應該處理登錄的時間戳。問題在於代碼似乎完全跳過了&用戶名,並轉到下一個用戶定義的條目,即代碼中的&傳遞。這是我的代碼:ECHO是接通,所以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 

它看起來像它的將全部選擇語句作爲條目? 誤差的特定線路如下:

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

您需要使用正確的PL/SQL參數傳遞給你的程序。

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 – Jongu

+0

您可以在sqlplus中輸入它,並將值作爲參數傳遞給過程調用。 PL/SQL運行在服務器上,而不是客戶端上,並且沒有U/I組件。如果您還有其他問題,請閱讀文檔。 – OldProgrammer

相關問題