1

私が持っているとしましょう:

create type address as object (
   line1 varchar2(50),
   city varchar2(50),
   member procedure insert_address(line1 varchar2, city varchar2)
)
/

create table address_table of address;

create type body address as
   member procedure insert_address(line1 varchar2, city varchar2) is
   begin
       insert into address_table values (line1, city);
       commit;
   end insert_address;
end;
/

どのように電話すればよいinsert_addressですか?

次のことを行うことで、私は得るinvalid number or types of arguments

begin
   address.insert_address('123 my road','london');
end;

私はこれを行うことができ、それは機能しますが、悪い考えのようです:

declare
  v_address address := new address(null,null);
begin
  v_address.insert_address('123 my road','london');
end;

ありがとう

4

2 に答える 2

2

static手順の代わりに使用memberします。

static procedure insert_address(line1 varchar2, city varchar2)

次に、インスタンスの代わりにオブジェクト型で呼び出すことができます:

address.insert_address('123 my road','london');

詳細は、 PL/SQLオブジェクト型の使用を参照してください。

于 2010-02-24T13:15:41.357 に答える
0

あなたがそれを構築したように(これは奇妙です)、プロシージャinsert_addressはアドレス型のオブジェクトのコンテキストでのみ呼び出すことができ、呼び出したオブジェクトとは関係のない値で、パラメータline1とcityで呼び出す必要があります"為に"。これは、テーブルとコードを作成して使用する方法です。

create table address_table (line1 varchar2(50), city varchar2(50));

create package address_pkg as
   procedure insert_address(p_line1 varchar2, p_city varchar2);
end;
/

create package body address_pkg as
   procedure insert_address(p_line1 varchar2, p_city varchar2) is
   begin
      insert into address_table (line1, city) values (p_line1, p_city);
   end;
end;
/

exec address_pkg.insert_address ('123 my road', 'london');

あなたのファンキーなモデルでは、insert_address プロシージャが「アドレス オブジェクト自体」をテーブルに挿入する必要があるようです。何かのようなもの:

create type address as object (
   line1 varchar2(50),
   city varchar2(50),
   member procedure insert_address
)
/

create table address_table of address;

create type body address as
   member procedure insert_address is
   begin
       insert into address_table values (line1, city);
       commit;
   end insert_address;
end;
/

次に、挿入は次のようになります。

declare
  v_address address := new address('123 my road','london');
begin
  v_address.insert_address;
end;
于 2010-02-24T13:24:59.717 に答える