0

次のようにパッケージから関数を呼び出すと、機能します。少し複雑ですが、条件変数がたくさんあります。

resultval := TG_PKG_ENTITY_TOTAL.user_entity_total('0012345678',
    '01-JUL-1955','30-JUN-2013',amounttype,accountrec,deptrec,appealrec,
    allocschoolrec,isunrestricted,pledge_exclude,pledgetypes_exclude,
    honormem_exclude) ;

select ステートメントの一部として使用しようとすると、機能しませ。これを修正する方法はありますか?カスタムデータ型への外部参照に関係している可能性があると思います。しかし、最初の例も失敗すると思いますが、うまくいきます。

以下は失敗します。

SELECT e.id_number,TG_PKG_ENTITY_TOTAL.user_entity_total(e.id_number,
    '01-JUL-1955','30-JUN-2013',amounttype,accountrec,deptrec,appealrec,
    allocschoolrec,isunrestricted,pledge_exclude,pledgetypes_exclude,
    honormem_exclude) AS SoftCredit
FROM advance.entity e

*FAIL は、エラー 6550 が発生することを意味します 引数の数または型が間違っています

次のタイプは、TG_PKG_TYPES というパッケージで定義されています。

TYPE string_array IS TABLE OF VARCHAR2(500);

TYPE account_rec IS RECORD
(condition VARCHAR2(20), 
 account_array string_array);

TYPE dept_rec IS RECORD
(condition VARCHAR2(20), 
 dept_array string_array);

TYPE allocschool_rec IS RECORD
(condition VARCHAR2(20), 
 school_array string_array);

 TYPE appeal_rec IS RECORD
(condition VARCHAR2(20), 
 appeal_array string_array);



 TYPE amounttype_rec IS RECORD
 (GiftAmt                BOOLEAN :=FALSE,
  GiftCreditAmt          BOOLEAN :=FALSE,
  PaymentAmt             BOOLEAN :=FALSE,
  PayCreditAmt           BOOLEAN :=FALSE,
  CompanyMatch           BOOLEAN :=FALSE,
  EmployeeMatch          BOOLEAN :=FALSE,
  EmpSpouseMatch         BOOLEAN :=FALSE,
  EmpMatchClaim          BOOLEAN :=FALSE,
  EmpSpouseMatchClaim    BOOLEAN :=FALSE,
  PledgeAmt              BOOLEAN :=FALSE,
  PledgeCreditAmt        BOOLEAN :=FALSE);

機能パラメータ:

FUNCTION user_entity_total( id_number VARCHAR2 := NULL,
                            i_start_date VARCHAR2 :=NULL, 
                            i_end_date VARCHAR2 :=NULL,
                            i_amount_type tu_pkg_types.amounttype_rec :=NULL,
                            i_account IN tu_pkg_types.account_rec :=NULL,
                            i_dept IN tu_pkg_types.dept_rec :=NULL,
                            i_appeal IN  tu_pkg_types.appeal_rec :=NULL,
                            i_allocschool IN  tu_pkg_types.allocschool_rec :=NULL,
                            i_isunrestricted CHAR :=NULL,
                            i_excludepledge BOOLEAN :=FALSE,
                            i_excludepledgetypes BOOLEAN :=FALSE,
                            i_excludehonormem BOOLEAN :=FALSE) RETURN NUMBER;
4

1 に答える 1

1

私の知る限り、PL/SQL レコードを引数 (または戻り値の型) として持つ関数を SQL から呼び出すことはできません (SQL からはスキーマ レベルの型しか使用できないため、コレクション型にも同じことが適用されます)。

オブジェクト型を (スキーマ レベルで) 宣言し、代わりにそれを関数のパラメーターとして使用してみてください。

于 2013-05-22T21:03:53.490 に答える