【发布时间】:2018-04-27 18:57:54
【问题描述】:
我在 SQL 和过程方面没有太多的实践经验。我需要一个迁移脚本,其中我需要根据其他两个表中的数据更新或插入一个表。
组织:
id 名称 pid
1 org1 null
2 org2 null
3 org3 1
4 org4 2Org_Channel:
org_id channel
1 CH_100
2 CH_101
Organization 表具有父子自引用关系。 (pid null 在父母的情况下)。 Org_Channel 是父 组织的映射表。
现在我有了第三张表Org_Settings,我需要根据上面两张表来迁移数据。这里的每条记录都表示一个组织 ID、一个以频道名称为前缀的设置名称(对于子 org.this 将是父 org.channel)和一个标志。我需要一个迁移 SQL 脚本/程序,以便为 每个组织 启用设置 Sign_On 作为 'Y'
当前表是这样的:
Org_Settings:
org_id s_name 已启用
1 CH_100_Sign_On N
1 CH_100_X_O 是
4 CH_101_Sign_On 是
现在 Org_Settings 可能包含也可能不包含每个组织的条目。我还需要进行迁移,如果 Sign_On 存在条目,则需要更新 enabled = Y。这样的结果将是:
Org_Settings:
org_id s_name 已启用
1 CH_100_Sign_On 是
2 CH_101_Sign_On 是
3 CH_100_Sign_On 是
4 CH_101_Sign_On 是
我可以想到这样的伪代码:
for i in each org
var pid = getPid(i)
var id = (null == pid) ? i : pid
var channel = getChannel(id);
var sname = channel + "_Sign_On"
if(settingsEntryExists(i, sname))
updateSettingsEnable(i, sname, 'Y')
else
insertSettings(i, sname, 'Y')
【问题讨论】:
标签: sql oracle stored-procedures database-migration sql-scripts