2012-06-03 25 views
1

我在Oracle中創建了一個過程,但是當我嘗試執行它時出現錯誤。下面列出了我正在採取的步驟來創建此過程:如何在oracle 10g中創建/調用過程?

SQL> ed getuserinfo 

create or replace procedure getUserInfo 
    (p_username out Users.username%TYPE, 
     p_password out Users.password%TYPE) IS 
BEGIN 

    select username,password into p_username,p_password from users where username='yogi'; 

END; 
/


SQL> exec getuserinfo 
BEGIN getuserinfo; END; 

      * 
ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00201: identifier 'GETUSERINFO' must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

問題是什麼,我該如何解決它? Olease任何人都可以幫助我嗎?

回答

2

您需要實際創建您尚未完成的過程。你需要一個分號end後,如果您是在SQL創建它*另外,您還需要添加/告知SQL * Plus的該塊已完成:

create or replace procedure getUserInfo 
     (p_username out Users.username%TYPE, 
     p_password out Users.password%TYPE) IS 
BEGIN 

select username,password into p_username,p_password from users; 

END; 
/
show error 

它總是明智的事後添加show error爲以便任何錯誤以可理解的格式返回到控制檯。

1

您需要在調用過程時指定輸出參數。

DECLARE 
    x Users.username%TYPE; 
    y Users.password%TYPE; 
BEGIN 
    getuserinfo(x, y); 
    DBMS_OUTPUT.PUT_LINE('username: ' || x || ', password: ' || y); 
END; 
2

您是否確實執行過創建過程語句?你有沒有得到一個「程序創建」。信息? Oracle不知道你的getuserinfo過程的事實表明,這個聲明沒有被執行。

2

我認爲這是程序調用錯誤!通話應如下所示:

SQL>var var1 varchar2(50); 
SQL>var var2 varchar2(50); 
SQL> exec getuserinfo(:var1, :var2); 
SQL> print var1, var2; 

玩得開心!