【问题标题】:Oracle SQL merge does not insert when the destination table is empty目标表为空时Oracle SQL 合并不插入
【发布时间】:2020-10-26 06:21:54
【问题描述】:

我想使用合并语句从工作模式更新/插入主模式中的记录。进行合并的代码如下。

MERGE INTO ods_workday.ORGANIZATION x
                USING (SELECT organization_id, organization_code, organization_type, organization_name, organization_description,  
                inactive, manager, leadership_role_assignee, organization_owner, supervisory_organization, 
                primary_site_reference, inactive_date, organization_subtype
                FROM ods_workday_w.ORGANIZATION) y
                ON (x.ORGANIZATION_ID = y.ORGANIZATION_ID)
                WHEN MATCHED THEN
                    UPDATE SET x.organization_code = y.organization_code, 
                                        x.organization_type = y.organization_type,
                                        x.organization_name = y.organization_name,
                                        x.organization_description = y.organization_description, 
                                        x.inactive = y.inactive,
                                        x.manager = y.manager, 
                                        x.leadership_role_assignee = y.leadership_role_assignee,
                                        x.organization_owner = y.organization_owner, 
                                        x.supervisory_organization = y.supervisory_organization,
                                        x.primary_site_reference = y.primary_site_reference,
                                        x.inactive_date = y.inactive_date, 
                                        x.organization_subtype = y.organization_subtype,
                                        x.UPDATE_TIME_STAMP = CURRENT_TIMESTAMP
                    WHERE x.organization_code <> y.organization_code OR
                                        x.organization_type <> y.organization_type OR
                                        x.organization_name <> y.organization_name  OR
                                        x.organization_description <> y.organization_description OR
                                        x.inactive <> y.inactive OR
                                        x.manager <> y.manager OR
                                        x.leadership_role_assignee <> y.leadership_role_assignee OR
                                        x.organization_owner <> y.organization_owner OR
                                        x.supervisory_organization <> y.supervisory_organization OR
                                        x.primary_site_reference <> y.primary_site_reference OR
                                        x.inactive_date <> y.inactive_date OR
                                        x.organization_subtype <> y.organization_subtype       
                WHEN NOT MATCHED THEN
                    INSERT(x.organization_id,  x.organization_code, x.organization_type, x.organization_name,
                    x.organization_description, x.inactive, x.manager, x.leadership_role_assignee,
                    x.organization_owner, x.supervisory_organization, x.primary_site_reference, x.inactive_date,
                    x.organization_subtype, x.UPDATE_TIME_STAMP)  
                    VALUES(y.organization_id,  y.organization_code, y.organization_type, y.organization_name,
                    y.organization_description, y.inactive, y.manager, y.leadership_role_assignee,
                    y.organization_owner, y.supervisory_organization, y.primary_site_reference, y.inactive_date,
                    y.organization_subtype, CURRENT_TIMESTAMP);

当目标表有记录时,代码可以正常工作,但当目标表为空时(与合并相比,记录为零)。

当目标架构中没有记录可以开始时,有没有一种方法可以使合并语句起作用。

Oracle 数据库是 11g。

【问题讨论】:

    标签: sql oracle11g oracle-sqldeveloper


    【解决方案1】:

    已解决。 我没有在源表中添加外键约束,因为在零记录上插入不起作用。

    【讨论】:

    • 很高兴您自己解决了这个问题;标题说这是plsql,但这是sql
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2023-01-20
    相关资源
    最近更新 更多