2012-06-03 3 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 

В чем проблема и как ее решить? Может, кто-нибудь может мне помочь?

ответ

2

Вам необходимо создать процедуру, которую вы еще не сделали. Вам нужна точка с запятой после end и если вы создаете ее в SQL * Plus вам нужно добавить / сообщить 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; 

Удачи!