2

私は次のものを持っています:

create type customer as object (
id number, name varchar2(10), points number,
member procedure add_points(num_points number)
) not final;
/

create type body customer as
member procedure add_points(num_points number) is 
begin
   points := points + num_points;
   commit;
end add_points;
end;
/

create table customer_table of customer;
/

insert into customer_table values (customer(123,'joe',10));
/

次に、これは匿名ブロックです。

declare
cust customer;
begin
select treat(value(c) as customer) into cust from customer_table c where id=123;
c.add_points(100);
end;

しかし、何も起こりません-ポイント値は10のままです。

私は何を逃しましたか?メンバープロシージャを作成update...set...commitし、ポイントと指定されたIDを渡すと、機能します。

ありがとう。

4

1 に答える 1

1

投稿したPL/SQLが無効です。私はあなたがこれを投稿するつもりだったと思います:

declare
  cust customer;
begin
  select treat(value(c) as customer) into cust from customer_table c where id=123;
  cust.add_points(100);
end;

つまり、5行目の「c」ではなく「cust」ですか?

その場合、そこで行ったすべてのことは、テーブルではなく、変数custのポイントの値を更新します。あなたはこのようにそれを見ることができます:

declare
  cust customer;
begin
  select treat(value(c) as customer) into cust from customer_table c where id=123;
  cust.add_points(100);
  dbms_output.put_line(cust.points);
end;

出力:

110

テーブル内のデータを更新するには、実際にUPDATEステートメントが必要です。

于 2010-02-22T16:49:58.807 に答える