Oracle中使用merge语句删除数据

Sra*_*van 5 plsql

如何使用 oracle 仅使用合并删除数据...我使用以下代码:

Merge 
into 
target_table
using 
source_tablle 
on (...)
when matched 
then delete
Run Code Online (Sandbox Code Playgroud)

但我在最后一行收到错误“缺少关键字”

mmm*_*pie 5

MERGE最后缺少这个UPDATE条款。
让我们看一个示例MERGE

CREATE TABLE employee (
employee_id NUMBER(5),
first_name  VARCHAR2(20),
last_name   VARCHAR2(20),
dept_no     NUMBER(2),
salary      NUMBER(10));

INSERT INTO employee VALUES (1, 'Dan', 'Morgan', 10, 100000);
INSERT INTO employee VALUES (2, 'Helen', 'Lofstrom', 20, 100000);
INSERT INTO employee VALUES (3, 'Akiko', 'Toyota', 20, 50000);
INSERT INTO employee VALUES (4, 'Jackie', 'Stough', 20, 40000);
INSERT INTO employee VALUES (5, 'Richard', 'Foote', 20, 70000);
INSERT INTO employee VALUES (6, 'Joe', 'Johnson', 20, 30000);
INSERT INTO employee VALUES (7, 'Clark', 'Urling', 20, 90000);

CREATE TABLE bonuses (
employee_id NUMBER, bonus NUMBER DEFAULT 100);

INSERT INTO bonuses (employee_id) VALUES (1);
INSERT INTO bonuses (employee_id) VALUES (2);
INSERT INTO bonuses (employee_id) VALUES (4);
INSERT INTO bonuses (employee_id) VALUES (6);
INSERT INTO bonuses (employee_id) VALUES (7);
COMMIT;
Run Code Online (Sandbox Code Playgroud)

现在我们有了一个示例数据结构,让我们进行一些合并:

MERGE INTO bonuses b
USING (
  SELECT employee_id, salary, dept_no
  FROM employee
  WHERE dept_no =20) e
ON (b.employee_id = e.employee_id)
WHEN MATCHED THEN
  UPDATE SET b.bonus = e.salary * 0.1
  DELETE WHERE (e.salary < 40000)
;
Run Code Online (Sandbox Code Playgroud)

所以这个命令使用merge_update_clause 的MERGE语法:(表/视图) (表/视图) (条件) (列..表达式) (条件)
MERGE INTO
USING
ON
WHEN MATCHED THEN
UPDATE SET
DELETE WHERE

我想我暗示的是你错过了你的UPDATE SET条款和DELETE条件。我建议跟进语法MERGE
**编辑:**SQLFiddle 回来了,所以你可以开始