2

Oracleオブジェクト型として宣言されたパラメータを、PLSQLテーブル型としてパラメータを持つプロシージャに渡すにはどうすればよいでしょうか?

例えば:

Procedure A(p_obj_emp t_obj_emp)
Procedure B(p_emp_tab t_emp_tab)

ここで、t_obj_emp = Oracle オブジェクトであり、t_emp_tab は binary_integer の PLSQL テーブルです。

PLSQLレコード型のパラメータを持つプロシージャに、Oracleオブジェクト型として宣言されたパラメータを渡すにはどうすればよいでしょうか?

例えば:

Procedure C(p_obj_dept t_obj_dept)
Procedure D(p_dept_rec t_dept_rec)

ここで、t_obj_dept = 2 つのフィールド (deptid、deptname) を持つ Oracle オブジェクトであり、t_dept_rec はパッケージ仕様で 2 つのフィールド (deptid、deptname) を持つ t_dept_rec として宣言されます。

親切にいくつかの例を手伝ってください。前もって感謝します

4

1 に答える 1

2

以下は私のためにコンパイルされ、あなたが望むことをしているように見えます:

CREATE OR REPLACE TYPE t_obj_emp AS OBJECT (
  emp_id      INTEGER,
  emp_name    VARCHAR2(100)
);
/

CREATE OR REPLACE TYPE t_obj_dept AS OBJECT (
  dept_id     INTEGER,
  dept_name   VARCHAR2(100)
);
/

CREATE OR REPLACE PACKAGE my_pkg AS

  TYPE t_emp_tab IS TABLE OF t_obj_emp INDEX BY BINARY_INTEGER;

  TYPE t_dept_rec IS RECORD (
    dept_id     INTEGER,
    dept_name   VARCHAR2(100)
  );

  PROCEDURE A(p_obj_emp t_obj_emp);
  PROCEDURE B(p_emp_tab t_emp_tab);
  PROCEDURE C(p_obj_dept t_obj_dept);
  PROCEDURE D(p_dept_rec t_dept_rec);
END;
/

CREATE OR REPLACE PACKAGE BODY my_pkg AS

  PROCEDURE A(p_obj_emp t_obj_emp)
  IS
    v_emp_tab     t_emp_tab;
  BEGIN 
    v_emp_tab(1) := p_obj_emp;
    B(v_emp_tab);
  END;

  PROCEDURE B(p_emp_tab t_emp_tab) IS BEGIN NULL; END;

  PROCEDURE C(p_obj_dept t_obj_dept)
  IS
    v_dept_rec    t_dept_rec;
  BEGIN
    v_dept_rec.dept_id := p_obj_dept.dept_id;
    v_dept_rec.dept_name := p_obj_dept.dept_name;
    D(v_dept_rec);
  END;

  PROCEDURE D(p_dept_rec t_dept_rec) IS BEGIN NULL; END;
END;
/

t_obj_dept同一のメンバー (上記の例のとなど) がある場合でも、あるオブジェクト/レコードを別のオブジェクト/レコードから作成する「便利な」方法はないことに注意してくださいt_dept_rec。すべてのフィールドの値を個別にコピーする必要があります。

それt_emp_tabは「binary_integerのPLSQLテーブル」だとおっしゃっています。これらのテーブルに sを格納するよりも、によってインデックス付けする方がはるかに一般的であるため、によってインデックス付けされた タイプの PL/SQL テーブルであることを意味していると思います。上記の例では、s のテーブルであると仮定しました。そうでない場合は、テーブルのオブジェクトまたはレコードのタイプにオブジェクトをマップする必要があります。binary_integerbinary_integerbinary_integert_obj_empt_obj_empt_emp_tab

于 2013-03-09T12:56:03.683 に答える