2017-07-14 25 views
0
INSERT INTO billing 
    (billing.emp_id, billing.billing_date, billing.billing_flag) 
VALUES 
    (1001, '2017-06-08', true), 
    (1002, '2017-06-08', true) ON DUPLICATE KEY UPDATE billing_date = 
VALUES 
    (billing_date), billing_flag = 
VALUES 
    (billing_flag); 

私はこのクエリを複数の挿入に使用します。これはOracleで可能ですか?MySQLのようなOracle SQLの複数の挿入?

+0

の可能性のある重複[オラクル:DUPLICATE KEY UPDATE ON]で(https://stackoverflow.com/questions/17254018/oracle-on-duplicate-key-update) –

+0

'あなたは '挿入'を意味すると思います。これらはSQLの2つの異なるものです。私はこれを反映するために質問を編集しました。あなたが求めているものでなければ編集してください。 –

答えて

1

あなたはoracleを使用していると仮定します。あなたが一度にINSERT複数の行にしたい場合は は、あなたはこのようにそれを行うことができます:あなたが投稿

INSERT ALL 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
SELECT * FROM dual; 
0

の例では、PL/SQLでそのように動作しません。
複数の列を同じテーブルに挿入する場合は、2つの操作を行うことができます。複数の挿入文を使用することができます。例えば

INSERT INTO Billing(Emp_Id, Biling_Date) VALUES ('1001', '2017-06-08'); 
INSERT INTO Billing(Emp_Id, Biling_Date) VALUES ('1002', '2017-06-08'); 

それとも、テーブルに挿入を行う手順を行い、そのプロシージャを呼び出すことができます。そうすれば、すべての列名を常に書き出す必要はありません。例えば

CREATE OR REPLACE PROCEDURE InsertBilling (nEmp_Id IN NUMBER, vBiling_Date IN VARCHAR2) 
AS 
BEGIN 
     INSERT INTO Billing(Emp_Id, Biling_Date) 
     VALUES (nEmp_Id, vBiling_Date); 

     COMMIT; 
END; 
/

BEGIN 
     InsertBilling('1001', '2017-06-08'); 
     InsertBilling('1002', '2017-06-08'); 
END; 
/
関連する問題