带有 Merge 语句的流
Posted
技术标签:
【中文标题】带有 Merge 语句的流【英文标题】:stream with Merge statement 【发布时间】:2021-08-04 18:41:24 【问题描述】:嗨,下面是我执行与流合并的步骤 雪花 1.创建表 创建或替换表employees(employee_id number, 工资号码, manager_id 号码); 2. 创建流。 在表 employees 上创建或替换流 employees_stream; 3.创建消费者表。 创建或替换表employees_consumer(employee_id number, 工资号,manager_id 号); 4. 我在员工表中插入了一些记录。 插入员工价值观(8,40000,4), (12,50000,9), (3,30000,5), (4,10000,5), (25,35000,9); 5.尝试执行以下命令时出现错误。 合并到 EMPLOYEES_CONSUMER 作为使用(SELECT * FROM EMPLOYEES_STREAM WHERE NOT (METADATA$ACTION= 'DELETE' AND METADATA$ISUPDATE=TRUE)) A.EMPLOYEE_ID=B.EMPLOYEE_ID 上的 B 何时 匹配和 b.METADATA$ACTION='INSERT' 和 b.METADATA$ISUPDATE 然后更新集 A.EMPLOYEE_ID =B.EMPLOYEE_ID, A.SALARY=B.SALARY, A.MANAGER_ID=B.MANAGER_ID 匹配时 b.METADATA$ACTION= 'DELETE' 然后删除时不匹配和 b. METADATA$ACTION='插入'然后插入 (EMPLOYEE_ID,SALARY,MANAGER_ID) 值 (B.EMPLOYEE_ID,B.SALARY,B.MANAGER_ID);错误为:“SQL编译 错误:第 15 行语法错误,第 8 位意外'INTO'。”请 帮助。
【问题讨论】:
【参考方案1】:这里的语法有一点错误。 使用 MERGE 您不必使用 INTO 在 NOT MATCHED 子句上插入。
所以您的 MERGE 查询应该如下所示:
MERGE INTO EMPLOYEES_CONSUMER AS A
USING (
SELECT *
FROM employees_stream
WHERE NOT (METADATA$ACTION= 'DELETE' AND METADATA$ISUPDATE=TRUE)
) AS B
ON A.EMPLOYEE_ID=B.EMPLOYEE_ID
WHEN MATCHED AND b.METADATA$ACTION= 'INSERT' AND b.METADATA$ISUPDATE THEN UPDATE
SET A.EMPLOYEE_ID =B.EMPLOYEE_ID,
A.SALARY=B.SALARY,
A.MANAGER_ID=B.MANAGER_ID
WHEN MATCHED AND b.METADATA$ACTION= 'DELETE' THEN DELETE
WHEN NOT MATCHED AND b. METADATA$ACTION= 'INSERT' THEN INSERT (EMPLOYEE_ID,SALARY,MANAGER_ID) VALUES (B.EMPLOYEE_ID,B.SALARY,B.MANAGER_ID)
;
【讨论】:
谢谢它现在正在工作 @user16595206 如果对您有帮助,您可以单击复选标记将答案标记为已接受以上是关于带有 Merge 语句的流的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01461 带有 MERGE INTO 语句和 clob 列
我可以在 MERGE 语句中对目标应用 WHERE 子句吗?