📜  oracle 插入或更新 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:24.485000             🧑  作者: Mango

Oracle 插入或更新 - SQL

在Oracle数据库中,我们可以使用INSERT和MERGE语句来插入或更新数据。INSERT语句是用于在表中插入新行的语句,而MERGE语句是一种可以执行插入或更新操作的语句。

INSERT语句

INSERT语句的基本语法如下:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

其中,table_name是要插入数据的表名,column1, column2, column3是表中需要插入数据的列名,value1, value2, value3是要插入的值。

例如,我们要在employees表中插入一条新的记录,可以使用以下SQL语句:

INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id, salary, department_id)
VALUES (103, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2022-04-01', 'yyyy-mm-dd'), 'IT_PROG', 6000, 60);

这将向employees表中插入一行数据,包含employee_id, first_name, last_name, email, hire_date, job_id, salary, department_id这些列的值。

MERGE语句

MERGE语句可以用于执行插入或更新操作。它的基本语法如下:

MERGE INTO table_name
USING (SELECT column1, column2, column3, ... FROM dual) source
ON (condition)
WHEN MATCHED THEN
  UPDATE SET column1 = value1, column2 = value2, column3 = value3, ...
WHEN NOT MATCHED THEN
  INSERT (column1, column2, column3, ...)
  VALUES (value1, value2, value3, ...);

其中,table_name是要执行操作的表名,source是要插入或更新的数据源,condition是用于匹配源和目标数据的条件。如果源数据和目标数据匹配,则执行UPDATE语句,否则执行INSERT语句。

例如,我们要根据employee_id来更新employees表中的记录,如果employee_id不存在,则插入一条新记录,可以使用以下SQL语句:

MERGE INTO employees
USING (SELECT 103, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2022-04-01', 'yyyy-mm-dd'), 'IT_PROG', 6000, 60 FROM dual) source
ON (employees.employee_id = source.column1)
WHEN MATCHED THEN
  UPDATE SET employees.first_name = source.column2,
             employees.last_name = source.column3,
             employees.email = source.column4,
             employees.hire_date = source.column5,
             employees.job_id = source.column6,
             employees.salary = source.column7,
             employees.department_id = source.column8
WHEN NOT MATCHED THEN
  INSERT (employee_id, first_name, last_name, email, hire_date, job_id, salary, department_id)
  VALUES (103, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2022-04-01', 'yyyy-mm-dd'), 'IT_PROG', 6000, 60);

这将根据employee_id更新employees表中的记录。如果employee_id不存在,则插入一条新记录。