1

我在 Oracle 中创建了一个过程,但是当我尝试执行它时出现错误。下面列出了我为创建此过程而采取的步骤:

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

有什么问题,我该如何解决?任何人都可以帮助我吗?

4

4 回答 4

2

你真的执行了你的创建过程语句吗?您是否获得了“已创建程序”。信息?Oracle 不知道您的 getuserinfo 过程这一事实向我表明该语句未执行。

于 2012-06-03T20:21:13.670 回答
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这样任何错误都会以可理解的格式返回到控制台。

于 2012-06-03T11:18:24.280 回答
2

我认为这是程序调用错误!调用应该如下所示:

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

玩得开心!!

于 2013-12-02T09:20:54.917 回答
1

调用过程时需要指定输出参数。

DECLARE
    x Users.username%TYPE;
    y Users.password%TYPE;
BEGIN
    getuserinfo(x, y);
    DBMS_OUTPUT.PUT_LINE('username: ' || x || ', password: ' || y);
END;
于 2012-06-03T14:55:20.887 回答