如何在oracle 10g中创建/调用程序?

时间:2012-06-03 11:13:20

标签: oracle stored-procedures

我在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 个答案:

答案 0 :(得分: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 :(得分:2)

您实际执行了创建过程语句吗?你有没有“创建过程”。信息? Oracle不知道您的getuserinfo过程这一事实告诉我该语句未执行。

答案 2 :(得分:2)

我认为这是错误的程序!!通话应如下所示:

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

玩得开心!!

答案 3 :(得分:1)

调用程序时需要指定out参数。

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