我有一个表格X,其中列已启用,其默认值为' T'。我需要一个触发器,它可以根据另一个表Y中存在的值将值放入启用列中,该表有一行名为trusted且值为' Y'。
因此,每次使用值插入表X时,我希望应根据表Y的行信任值更新enabled的值。
如果信任=' N'然后设置enable =' F' 否则启用=' T'
很抱歉没有提供任何代码。到目前为止,我对这个策略感到有点困惑。
var string= "1,2,3,4-8,15,17,18-21,22";
var chunks = string.split(",");
var numbers = [];
for (var i = 0; i < chunks.length; i++) {
var chunk = chunks[i];
if (chunk.indexOf('-') < 0) {
numbers.push(parseInt(chunk));
}
else {
var pair = chunk.split('-');
for (var j = pair[0]; j <= pair[1]; j++) {
numbers.push(parseInt(j));
}
}
}
console.log(numbers);
答案 0 :(得分:1)
create or replace trigger tg_ins_x before insert on x for each row
begin
select case when value = 'Y' then 'T' else 'F' end
into :new.enabled
from y where key = 'trusted';
end;
如果您不想覆盖enabled
的提供值:
create or replace trigger tg_ins_x before insert on x for each row
begin
if :new.enabled is null then
select case when value = 'Y' then 'T' else 'F' end
into :new.enabled
from y where key = 'trusted';
end if;
end;
您可以添加异常(太多行,找不到数据,其他)引发错误或指定默认值:
exception when no_data_found then
:new_enabled := 'F';
答案 1 :(得分:1)
不是使用触发器,为什么不改为使用视图呢?
类似的东西:
create or replace view x_vw (id, username, enable) as
select x.id
x.username
case when (select upper(value) from y where key = 'trusted') = 'N' then 'F'
else 'T'
end enable
from x;
N.B。这假定如果您将可信行的值更改为N,则需要将X中的所有行更改为“F&#39;”。如果您不希望发生这种情况,请坚持使用触发器。