Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle中为每个块创建序列_Oracle_Block_Sequence - Fatal编程技术网

在oracle中为每个块创建序列

在oracle中为每个块创建序列,oracle,block,sequence,Oracle,Block,Sequence,我通过以下方式学会了如何创建一个简单的序列: CREATE SEQUENCE wrk_fil_cde_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; 这将创建一个序列,每行递增1…但我需要一些不同的东西。我需要从Deb1到Deb2的每一行seq_col应该是1,在Deb2出现后,它应该增加1,如: 看起来你需要一个触发器 例如: CREATE OR REPLACE TRIGGER your_trigger BEFORE IN

我通过以下方式学会了如何创建一个简单的序列:

CREATE SEQUENCE wrk_fil_cde_seq
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;
这将创建一个序列,每行递增1…但我需要一些不同的东西。我需要从Deb1到Deb2的每一行seq_col应该是1,在Deb2出现后,它应该增加1,如:


看起来你需要一个触发器

例如:

CREATE OR REPLACE TRIGGER your_trigger
BEFORE INSERT ON your_table
FOR EACH ROW 
DECLARE
p_seq_id number;
BEGIN
SELECT nvl(max(seq_col) ,0)
INTO p_seq_id 
FROM your_table;

IF :NEW.val_col LIKE 'Deb%' THEN
:NEW.seq_col = p_seq_id + 1;
ELSE 
:NEW.seq_col = p_seq_id;
END IF;

END; 
但它不适用于更新。因为还不清楚如何确定,该行在Deb1和Deb2之间

如果您真的想使用sequence,可以这样做:

CREATE OR REPLACE TRIGGER your_trigger
BEFORE INSERT ON your_table
FOR EACH ROW 

BEGIN

IF :NEW.val_col LIKE 'Deb%' THEN
:NEW.seq_col = wrk_fil_cde_seq.nextval;
ELSE 
:NEW.seq_col = wrk_fil_cde_seq.currval;
END IF;

END;

现在还不清楚你想要什么。对于从Deb1到Deb2的每一行,seq_col应为1,在出现Deb2后,应增加1?这就是您想要的吗?我建议您在输出值时这样做,而不是在插入值时这样做。@GordonLinoff-或根据确切的用例生成作为加载一部分的值。@JustinCave请问我该怎么做数据加载到此表中的情况如何?由于堆组织的表本质上是无序的,您如何知道哪些行在“Deb1”和“FIN1”之间?为了使结果按您呈现的方式排序,您按哪个列排序?有没有第三个没有图片的专栏给出订单?首先谢谢你的回答。没有其他建议trigger@Abderrahim您希望如何使用顺序填充此字段?在insert语句中还是自动?是的,我更喜欢序列:)序列在数据库中是一个单独的对象。在创建触发器之前,它和表并没有关系,触发器使用序列在表中插入值。所以您总是需要一个触发器来自动填充字段。这就是为什么没有触发器a的问题对我来说是不可理解的,因为我使用的是Oracle Data Integrator,表在第一个实例中不存在,当我运行映射时,ODI将自动创建。你知道触发器需要表已经存在于我的数据库中,因此我需要其他解决方案