Oracleデータを仮想列と複合フリップフロップを作成する方法
3280 ワード
本稿では、Oracleデータベースの仮想列と複合フリップフロップに関する知識を紹介します。仮想列や複合フリップフロップの作成など、作成例を示します。次に、このプロセスを理解しましょう。
一、仮想列
Oralceの仮想列は、これまで多くのフリップフロップを使用する必要があったか、コードによる計算統計が必要であったデータ情報を解決しました。以前は他の列を統計するたびに、新しい列を作成するときは、select文で統計計算によって新しい列を追加する方法を採用していましたが、実行効率が低い上に、クエリSQL文が冗長になり、複雑で間違えやすいです。開発効率とプログラムの実行効率が著しく低下しました。Oralce仮想列の導入はこの問題を解決した。
Oralceの仮想列にも問題があります。insert into talbeを使用できません。name values().文は、仮想列を含むテーブルにデータを追加する場合は、insert文の追加するテーブルの列名を書き込む必要があります。insert into table_name(list 1,list 2,listend)列名に仮想列名が表示されません。そうでないとエラーが発生します。
仮想列を作成する例は以下の通りです。
二、複合トリガー
複合フリップフロップは実際に一つの全体として定義された四つの異なるフリップフロップである。例えば、UPDATE複合フリップフロップは、before statement、before row、after statement、afterrowを複合フリップフロップに統合する。これは単一コードセグメントですので、他の任意の単一PL/SQLコードのように変数を転送できます。
説明を助けるために、例を引用します。注:salesテーブルと同じ表sales_を作成しました。log.
注意したいのは:sales_ロゴの中に仮想列があるとInsert into salesを使用できません。ロゴ values (コールカーsales_ロゴ(counter)直接に追加操作を行う場合は、表の列名を明記しなければなりません。エラーが発生します。
Oracleデータについて仮想列と複合フリップフロップを作成する方法をここに紹介します。今回の紹介はあなたのために何か収穫がありますように。
一、仮想列
Oralceの仮想列は、これまで多くのフリップフロップを使用する必要があったか、コードによる計算統計が必要であったデータ情報を解決しました。以前は他の列を統計するたびに、新しい列を作成するときは、select文で統計計算によって新しい列を追加する方法を採用していましたが、実行効率が低い上に、クエリSQL文が冗長になり、複雑で間違えやすいです。開発効率とプログラムの実行効率が著しく低下しました。Oralce仮想列の導入はこの問題を解決した。
Oralceの仮想列にも問題があります。insert into talbeを使用できません。name values().文は、仮想列を含むテーブルにデータを追加する場合は、insert文の追加するテーブルの列名を書き込む必要があります。insert into table_name(list 1,list 2,listend)列名に仮想列名が表示されません。そうでないとエラーが発生します。
仮想列を作成する例は以下の通りです。
create table sales
(
sales_id number,
cust_id number,
sales_amt number,
sale_category varchar2(6) /* */
generated always as
(
case when sales_amt <= 10000 then 'LOW'
when sales_amt > 10000 and sales_amt <= 100000 then 'MEDIUM'
when sales_amt > 100000 and sales_amt <= 1000000 then 'HIGH' else 'ULTRA' end
) virtual /* */
);
仮想列が「generated always as」に指定されています。これは、列の値が実行時に生成され、表の一部として記憶されないことを意味します。この子文の後には、詳細なCASE文で値を計算する方法があります。最後に、「virtual」を指定して強化します。これは仮想列の事実です。二、複合トリガー
複合フリップフロップは実際に一つの全体として定義された四つの異なるフリップフロップである。例えば、UPDATE複合フリップフロップは、before statement、before row、after statement、afterrowを複合フリップフロップに統合する。これは単一コードセグメントですので、他の任意の単一PL/SQLコードのように変数を転送できます。
説明を助けるために、例を引用します。注:salesテーブルと同じ表sales_を作成しました。log.
create or replace trigger tri_sales
for update of sales_amt on SALES
compound trigger
type ty_sales_log is table of sales_log%rowtype
index by pls_integer;
coll_sales_log ty_sales_log;
ctr pls_integer:=0;
before statement is
begin
dbms_output.put_line('in before statement');
end before statement;
before each row is
begin
dbms_output.put_line('in before each row');
end before each row;
after each row is
begin
ctr := ctr+1;
dbms_output.put_line('in after each row.sales_amt'||:new.sales_amt);
coll_sales_log(ctr).sales_id := :old.sales_id;
coll_sales_log(ctr).cust_id := :old.cust_id;
coll_sales_log(ctr).sales_amt := :new.sales_amt;
end after each row;
after statement is
begin
dbms_output.put_line('in after statement');
forall counter in 1..coll_sales_log.count()
insert into sales_log(sales_id,cust_id,sales_amt)
values (coll_sales_log(counter).sales_id,coll_sales_log(counter).cust_id,coll_sales_log(counter).sales_amt);
end after statement; /* Insert into sales_log values
(coll_sales_log(counter)); */
end tri_sales;
上記の例は4つの異なるトリガ形式を含み、それらの間は独立して実行される。注意したいのは:sales_ロゴの中に仮想列があるとInsert into salesを使用できません。ロゴ values (コールカーsales_ロゴ(counter)直接に追加操作を行う場合は、表の列名を明記しなければなりません。エラーが発生します。
Oracleデータについて仮想列と複合フリップフロップを作成する方法をここに紹介します。今回の紹介はあなたのために何か収穫がありますように。