我尝试调用程序时为什么会出错?

Suh*_*pta 1 oracle plsql procedure oracle11g

我创建了一个名为greet的过程:

create procedure greet(message in char(50))
as  
begin 
  dbms_output.put_line('Greet Message : ' || message);
end;
Run Code Online (Sandbox Code Playgroud)

程序编译成功,但当我尝试将其称为:

execute greet('Hey ! This is a self created procedure :)');
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

execute greet('Hey ! This is a self created procedure :)')
Error report:
ORA-06550: line 1, column 7:  
PLS-00905: object SUHAIL.GREET is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)

它有什么错误?我为什么要这个?

注意:'suhail'是连接到oracle服务器的当前用户的名称

Jus*_*ave 6

我不相信你的程序编译成功.当我尝试在我的系统上编译它时,我得到语法错误

SQL> create procedure greet(message in char(50))
  2  as
  3  begin
  4    dbms_output.put_line('Greet Message : ' || message);
  5  end;
  6  /

Warning: Procedure created with compilation errors.

SQL> sho err
Errors for PROCEDURE GREET:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/32     PLS-00103: Encountered the symbol "(" when expecting one of the
         following:
         := ) , default varying character large
         The symbol ":=" was substituted for "(" to continue.
Run Code Online (Sandbox Code Playgroud)

如果我解决语法错误(您无法指定输入参数的长度),它可以工作

SQL> ed
Wrote file afiedt.buf

  1  create or replace procedure greet(message in char)
  2  as
  3  begin
  4    dbms_output.put_line('Greet Message : ' || message);
  5* end;
SQL> /

Procedure created.

SQL> set serveroutput on;
SQL> execute greet('Hey ! This is a self created procedure :)');
Greet Message : Hey ! This is a self created procedure :)

PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

如果您真的希望将输入参数声明为,我会感到震惊CHAR.几乎总是,您应该使用VARCHAR2字符串.在你真正想要空白填充语义的情况下遇到这种情况是非常罕见的CHAR.