我在oracle中执行以下过程但是出现编译错误

时间:2014-06-23 19:57:28

标签: sql database oracle stored-procedures oracle11g

实际上我想使用存储过程

从表中获取用户名
    CREATE OR REPLACE PROCEDURE GetRecord
    ( 
       p_ID   IN  integer       ,                  
      p_user OUT VARCHAR2  
    ) 
    AS 
    BEGIN  
       SELECT  
       USERNAMES   
       INTO   
        p_user  
        FROM   tblUsers
     WHERE  ID  = p_ID  ; 

     END  GetRecord;


 BEGIN
  DECLARE A VARCHAR2
 EXECUTE GetRecord(21,A);
 END

当我运行上述程序时,我遇到了以下错误

Error starting at line : 17 in command -
BEGIN
DECLARE A VARCHAR2
EXECUTE GetRecord(21,A);
END
Error report -
ORA-06550: line 3, column 1:
PLS-00103: Encountered the symbol "EXECUTE" when expecting one of the following:

   := . ( @ % ; not null range default character
The symbol ";" was substituted for "EXECUTE" to continue.
ORA-06550: line 4, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:

   begin function pragma procedure subtype type <an identifier>
   <a double-quoted delimited-identifier> current cursor delete
   exists prior
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

实际上我想使用存储过程

从表中获取用户名

1 个答案:

答案 0 :(得分:3)

您用于执行程序的代码似乎不正确。这听起来像你想要的

DECLARE
  l_usernames tblUsers.usernames%type;
BEGIN
  GetRecord( 21, l_usernames );
END;

一般来说,我强烈反对你的命名惯例。使用复数usernames作为列名是没有意义的。名为GetRecord的程序不会告诉您它的作用 - GetUsername会更有意义。您的匿名块似乎也声明了一个存储返回用户名的本地变量a,从使用有意义的标识符的角度来看也没有意义。

我还建议程序是错误的方法。如果您的目标是返回单个值,请使用函数。函数返回东西,程序没有。函数可以在SQL语句中使用,过程不能。