0

table_1 と table_2 の 2 つのテーブルがあります。これらのテーブルには、p_code (varchar2) と o_code (varchar2) の 2 つの列があり、どちらも主キーです。したがって、次のようになります。

table_1.p_code,
table_1.o_code,
table_2.p_code,
table_2.o_code

table_2 を table_1 にコピーしたいのですが、同じ行が table_1 に既に存在する可能性があります。関数またはプロシージャでこの状況を処理できると思っていましたが、できませんでした。どうすればこれを処理できますか?

ところで: 2 つのテーブルと列の例:

Table_1:
P_code    O_code
C123      PREP100
C123      PREP101

Table_2:
P_code    O_code
C123      PREP101
C123      PREP102

table_2 を Table_1 に挿入したいのですが、C123 PREP が既に Table_1 に存在しています。最後の 3 文字を計算し、数値に切り詰め、1 を増やし、varchar2 に変換し、table_1 に存在するかどうかを確認できると考えました。しかし、SQLプロシージャまたは関数を書くことができませんでした...

4

2 に答える 2

0

これはほとんどの SQL エンジンで動作するはずです ( SQLFiddle Demo for Oracle 11G ):

INSERT INTO table_1 (p_code, o_code)
SELECT p_code, o_code FROM table_2
MINUS
SELECT p_code, o_code FROM table_1

あなたの例では、あなたの主キーは(p_code, o_code).

UPDATE : SQL92 には標準EXCEPT演算子がありますが、Oracle ではサポートされていません。代わりに、MINUSまったく同じように機能する を使用します。

于 2013-06-07T06:57:12.850 に答える
0

次のようなものを使用できます。

insert into table_1 (p_code, o_code)
(-- add all rows in table_2 that are not present in table_1
 (select t2.p_code, t2.o_code from table_2 t2 
 minus
 select t1.p_code, t1.o_code from table_1 t1)
 union all
 -- add all rows in table_2 that are present in table_1
 (select t2.p_code, t2.o_code || '_2' from table_2 t2
  join table_1 t1a on t2.p_code = t1a.p_code and t2.o_code = t1a.o_code)
);

これにより、変更されていない新しい行が挿入され、既存の行の末尾に _2 が付けられます。後で UPDATE ステートメントを簡単に実行して一意の ID を生成するか、(できれば) 最初にシーケンスを使用して新しい ID を生成することができます。

于 2013-06-07T10:33:55.327 に答える