2012-07-01 7 views
6

PL/SQLでは、以下のコードは失敗します。 varchar2パラメータのサイズの定義は許可されていません。なぜなのかご存知ですか?どうすれば修正できますか?PL/SQLファンクション・パラメータ

create or replace function logMessage(msg varchar2(2000)) 
return number as 
begin 
    null;  
    return 1; 
end logMessage; 
/

エラーメッセージが

1/33 PLS-00103は、次のとおりです。記号が発生しました "(" 次のいずれかを期待する場合:

:。=)を、%のデフォルトの文字@ "の代わりに":= "という記号を使用しました(

答えて

9

サイズの制約を取り除いて修正しました。編集:

create or replace function logMessage (msg in varchar2) 
return number is 
begin 
    null;  
    return 1; 
end logMessage; 
/

あなたの機能はこれよりやや複雑だと思いますか?

create function声明from the documentationの完全な構文は次のとおりです。あなたが興味を持っているが、あなたはTECH on the Netがより便利かもしれ場合

CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName 
    [(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])] 
    RETURN DataType [InvokerRightsClause] [DETERMINISTIC] 
    {IS|AS} 

the specificsの周りに多くの情報あります。 なぜのあなたの最初の質問への答えで


私は知らないと答えを見つけることができません。しかしto quote APC

これは迷惑ですが、それは我々が とそれを生きているPL/SQLは非常に動作する方法です。簡単に言えば

、あなたは何かがそれに対処するため、可能とできるようになるだろうどのくらい実行時にを知っている必要があります。いくつかのオプションは、あなたがが考えることができますがあります。

あなたは、あなたが変数を定義することができますするメッセージを望むものの長さを知っている場合は、デフォルト値は、そのパラメータのsubstrです:また

create or replace function logmessage (msg in varchar2) return number is 

    l_msg varchar2(2000) := substr(msg,1,2000); 

begin 
    return 1; 
end; 

あなたは、関数自体の長さを確認することができます。

create or replace function logmessage (msg in varchar2) return number is 

begin 

    if length(msg) > 2000 then 
     return 0; 
    end if; 

    return 1; 
end; 
3

パラメータは、データ・タイプではなく、データ型の長さまたは精度なしで宣言されています。つまり、パラメータはVARCHAR2として宣言できますが、VARCHAR2(30)は無効です)で宣言されません。

関連する問題