我怎样才能只计算那些与insert具有相同省的行呢?
create or replace trigger sequence_num_trigg before insert on Distributor for each row
declare counter NUMBER;
BEGIN
select count(*) INTO counter from distributor where treat(address as distributor_address_ty).province = :new.treat(address as distributor_address_ty).province;
if counter != 0 then
:new.seq_no := 1 + counter;
else
:new.seq_no := 0;
END IF;
END;
我知道这部分不对
where treat(address as distributor_address_ty).province = :new.treat(address as distributor_address_ty).province;
怎么解决呢?
1条答案
按热度按时间polkgigr1#
不要使用触发器。相反,使用标识列(或序列)为每行提供唯一的id,然后在查询表时使用
ROW_NUMBER
分析函数生成seq_no
:然后插入一些示例数据:
然后,您可以使用以下命令生成
seq_no
:其输出:
| ID| ADDRESS.PROVINCE |SEQ_NO|
| --------------|--------------|--------------|
| 1|A|1|
| 二|A|二|
| 四|A|三|
| 三|B|1|
fiddle