2017-12-13 11 views
0

私のビルドの一部として、いくつかの.sqlファイルを変更しています。今のように、クエリはテーブルから特定のレコードを削除し、インストール中にそれらを再追加します。私たちが望むものは、特定のレコードが存在するかどうかを確認することです。もしそうであれば、何もしないでください。レコードが存在しない場合はSQL bullkの挿入

これもやはり.sqlファイルなので、正しい構文を取得できないようです。私はそれが

IF (SELECT COUNT(*) FROM foo WHERE x = bar) <= 0 THEN BEGIN Insert statements... END END IF;

されるべきだと思うしかし、これは私のために動作していないようです。私はまた存在しないことを見てきましたが、それもうまくいきませんでした。私が別のテーブルから引っ張ってくるわけではないので、私が信じていないMERGEコマンドは、ここでは関連しています。 Oracle SQL Developerを使用していますが、何か不足していますか?

これを解決しましたが、私の仕事:このような

insert into table (col1, col2) 
select 'val1','val2' 
from dual 
where not exists(select * 
       from table 
       where (col1 ="val1" and col2='val2')); 
+0

それをテストし、それは「していないようですあなたのために働いている "。確かに、これは気晴らしの妖精の声明です。どのように機能していないのかを定義することはできません。修正する方法はありません。 –

+0

はい、そうです。申し訳ありませんが、私は現時点で私の前にオラクルを持っていませんでした。 SQLの開発者が誤った構文を示すエラーを出しています。だから、私は正しい球場にいると思った。 – Josh

+0

私は私のgrumpinesを乗り越えて答えを投稿...私は私の前にオラクルを持っていない:) –

答えて

0

は何か(私はOracleは手元にありません)

INSERT INTO TABLE (PK, COl2, Col3) 
SELECT 1, 'X', 'Y' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 1); 

選択はレコードのみのレコードを返しません存在する(PKの列に一致)

レコードごとに1つを実行することも、 oこれは次のようなものです:

INSERT INTO TABLE (PK, COl2, Col3) 
SELECT 1, 'X', 'Y' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 1) 
UNION ALL 
SELECT 2, 'X', 'Y' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 2); 
UNION ALL 
SELECT 3, 'X', 'Y' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 3); 

これはおそらく半ダースのレコードでOKです(Excelの式から生成できます)。このようなIF文の場合我々は、SQLを使用することはできません

+0

私はここにあなたのポイントを参照してくださいが〜30挿入のために非現実的かもしれません? – Josh

+0

私も複合キーを持っていますが、それは問題ではありません – Josh

+0

他の答えよりも実用的ではありません。それは簡単にExcelから生成することができます。 –

0

IF (SELECT COUNT(*) FROM foo WHERE x = bar) <= 0 

だから、あなたが何をする必要があるか、カウントを実行され、その後どのように

SELECT COUNT(*) 
into v_count 
FROM foo WHERE x = bar; 

if v_count <= 0 
THEN 
BEGIN 
Insert statements... 
END; 
END IF; 
+0

はい、これは私が考えていたものです。しかし、これはPL/SQLと見なされますか?最後のENDでコンパイルエラーが発生します。実行できません IF NOT EXIST(SELECT * FROM foo where primary_key = 1) THEN 挿入ステートメント... END IF; ? – Josh

+0

*これはPL // SQLと見なされていますか?*私が書いたことはありますが、 "insert statements ..."によって表現されていたことを仮定していました。これがうまくいかない場合は、詳細。しかし、あなたが投稿したIF文は**有効なPL/SQLではありません。 – APC

+0

私はPL/SQLでトリガで動作するメソッドがたくさんありますが、私のアプリケーションのインストール時に実行される.sqlファイルでこれが実行されるかどうかはわかりません。 inster文で私は約30行を意味します。IF(条件) INSERT INTO foo(col1、col2)VALUES( 'bar'、 'foo') INSERT INTO foo(col1、col2)VALUES( 'foo'、 'bar') END IF; – Josh

関連する問題