2017-05-11 4 views
-1

これは私のOracleの機能、私はそれを使用Booleanパラメータ

FUNCTION functionName(
    param1 VARCHAR2, 
    param2 VARCHAR2, 
    param3 DATE, 
    param4 DATE, 
    param5 BOOLEAN) 
RETURN myOwnType; 

の署名である:

myOwnTypeVar := functionName('something', 'some', SYSDATE, SYSDATE, TRUE); 

私はこのエラーを持っている:

PLS-00382 expression is of wrong type. 

すべてのタイプがいるようです尊敬されるべきである。私は関数でブールパラメータを使うことができるのだろうかと思う(手続きでそれを使うのに問題はなかった)。

ありがとうございます。

注:myOwnTypeVar

myOwnTypeVar myOwnType; 
+1

戻り値の型は変数の型と一致しますか? – Randy

+0

myOwnTypeVarはどのように宣言されていますか? –

+2

問題はブールパラメータではありません。コードの詳細を表示します。特に、エラーメッセージに記載されている行の周りに表示してください。エラーメッセージは、エラーがどこで発生したかを(コードのどの行に)表示する必要があります。 – mathguy

答えて

1

" I wonder if I can use Boolean parameter in function "

の宣言はい。 PL/SQLはブール型のデータ型をサポートしています。 myOwnTypeはこのようなPL/SQLレコードの場合...

create or replace package p23 as 
    type myOwnType is record (
     attr1 varchar2(10), 
     attr2 varchar2(30), 
     attr3 date, 
     attr4 date, 
     attr5 boolean 
    ); 
    function functionname(
     param1 varchar2, 
     param2 varchar2, 
     param3 date, 
     param4 date, 
     param5 boolean) 
    return myowntype;  
end p23; 
/
create or replace package body p23 as 
    function functionname(
     param1 varchar2, 
     param2 varchar2, 
     param3 date, 
     param4 date, 
     param5 boolean) 
     return myowntype 
    is 
     rv myOwnType; 
    begin 
     rv.attr1 := param1; 
     rv.attr2 := param2; 
     rv.attr3 := param3; 
     rv.attr4 := param4; 
     rv.attr5 := param5; 
     return rv; 
    end; 
end p23; 
/

は...全く問題はありません。

SQL> declare 
    2 myOwnTypeVar p23.myowntype; 
    3 begin 
    4 myOwnTypeVar := p23.functionName('something', 'some', SYSDATE, SYSDATE, TRUE); 
    5 end; 
    6/ 

PL/SQL procedure successfully completed. 

SQL> 

だから何がエラーの原因は? PLS-00382は割り当ての失敗です。それは代わりにboolean型の文字列の属性で定義された場合は、この割り当ては、そのエラーを投げるでしょう... ...このように、

type myOwnType is record (
     attr1 varchar2(10), 
     attr2 varchar2(30), 
     attr3 date, 
     attr4 date, 
     attr5 varchar2(1) 
    ); 

myOwnTypeの宣言を掲示したがされていない:

rv.attr5 := param5; 
でもタイプの脇のOracle SQLがブールをサポートしていないよう

、:

SQL> create or replace type myOwnType as object (
    2  attr1 varchar2(10), 
    3  attr2 varchar2(30), 
    4  attr3 date, 
    5  attr4 date, 
    6  attr5 boolean 
    7 ); 
/ 

Warning: Type created with compilation errors. 

SQL> sho err 
Errors for TYPE MYOWNTYPE: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
6/8  PLS-00530: Illegal type used for object type attribute: 
     'BOOLEAN'. 

SQL> 

でこのシナリオfunctionName()はコンパイルされないので、PLS-00382 expression is of wrong typeを投げることはできませんでした。

+0

ここではどのような意味でSQL型ですか?これはPL/SQLファンクションです。ブーリアン・パラメータを持つということは、SQLからコールできないことを意味します。 PL/SQLから呼び出されるのを止めるべきではありません。 –

+0

@JeffreyKemp - あなたは今です。もともと、ダミアンからの回答のためにそこにいました(削除されたが、あなたはその担当者を得ていた)。根本的に、OPには元の質問に**タイプ**の定義が含まれておらず、私たちの質問に答える気にもなりませんでした。 – APC

+0

私は参照してください。けっこうだ。 –

関連する問題