1

greetという名前のプロシージャを次のように作成しました:

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

プロシージャは正常にコンパイルされましたが、次のように呼び出そうとすると:

execute greet('Hey ! This is a self created procedure :)');

エラーが発生します:

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:

それはどのようなエラーですか?なぜ私はそれを得るのですか?

注:「suhail」は、Oracleサーバーに接続している現在のユーザーの名前です。

4

2 に答える 2

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.

構文エラーを解決すると(入力パラメーターの長さを指定できません)、機能します

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.

入力パラメータをとして宣言したい場合は、ショックを受けますCHAR。ほとんどの場合、VARCHAR2文字列に使用する必要があります。の空白パディングセマンティクスが本当に必要な場合に遭遇することは非常にまれですCHAR

于 2013-03-13T09:20:43.130 に答える
1

これはうまくいっています。

create or replace
procedure greet(message in char)
as  
begin 
  dbms_output.put_line('Greet Message : ' || message);
end;

charデータ型のメインプロパティを参照してください。入力データの長さが指定したサイズよりも短いため、空白が追加されます。この場合、varchar2では発生しません。

  1. 上記の手順では、charプロパティに違反しているため、ほとんどvarchar2のように扱われます。したがって、入力パラメーターのサイズを削除すると、それが機能し、charは入力の最大長をサポートします。
于 2013-03-13T09:59:47.190 に答える