Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Reg: generating sequence dynamically -

915396Oct 4 2015 — edited Oct 4 2015

Hi Experts,

I have 2 tables:

First table - I_STG_X - is the main table where the data is stored permanently.

Second table - X1 - is actually a GTT where data is constructed properly and then inserted into I_STG_X.

This is done using :

insert into i_stg_x

select nvl( select max(file_no) from i_stg_x, 0 ) + id from x1 ;

But, the highlighted part to generate new file_no is prone to error, if the code is running in parallel in different sessions.

The "id" column in table X1 is generated using DENSE_RANK based on some logic. But, ultimately the data looks like as shown below in DDL.

Is the anyway I can use Sequences to achieve this ?

---[ DDLs ]---


create table i_stg_x

as

select 1 file_no,1 seq_no,'aaaa_1' content FROM dual union all 

select 1 file_no,2 seq_no,'aaaa_2' content FROM dual union all 

select 1 file_no,3 seq_no,'aaaa_3' content FROM dual union all 

select 1 file_no,4 seq_no,'aaaa_4' content FROM dual union all 

select 1 file_no,5 seq_no,'aaaa_5' content FROM dual union all 

select 1 file_no,6 seq_no,'aaaa_6' content FROM dual union all 

--

select 2 file_no,1 seq_no,'bbbb_1' content FROM dual union all 

select 2 file_no,2 seq_no,'bbbb_2' content FROM dual union all 

select 2 file_no,3 seq_no,'bbbb_3' content FROM dual union all 

select 2 file_no,4 seq_no,'bbbb_4' content FROM dual union all 

select 2 file_no,5 seq_no,'bbbb_5' content FROM dual union all 

select 2 file_no,6 seq_no,'bbbb_6' content FROM dual union all 

select 2 file_no,7 seq_no,'bbbb_7' content FROM dual union all 

--

select 3 file_no,1 seq_no,'cccc_1' content FROM dual union all 

select 3 file_no,2 seq_no,'cccc_2' content FROM dual union all 

select 3 file_no,3 seq_no,'cccc_3' content FROM dual union all 

select 3 file_no,4 seq_no,'cccc_4' content FROM dual

;

CREATE TABLE x1

AS

SELECT 1 id, 1 sl_no, 'aaaaa1' content FROM dual UNION ALL

SELECT 1 id, 2 sl_no, 'aaaaa2' content FROM dual UNION ALL

SELECT 1 id, 3 sl_no, 'aaaaa3' content FROM dual UNION ALL

SELECT 1 id, 4 sl_no, 'aaaaa4' content FROM dual UNION ALL

SELECT 2 id, 1 sl_no, 'bb1'    content FROM dual UNION ALL

SELECT 2 id, 2 sl_no, 'bb2'    content FROM dual UNION ALL

SELECT 2 id, 3 sl_no, 'bb3'    content FROM dual; 

Finally, the data in I_STG_X should be this -

FILE_NOSEQ_NOCONTENT
11aaaa_1
12aaaa_2
13aaaa_3
14aaaa_4
15aaaa_5
16aaaa_6
21bbbb_1
22bbbb_2
23bbbb_3
24bbbb_4
25bbbb_5
26bbbb_6
27bbbb_7
31cccc_1
32cccc_2
33cccc_3
34cccc_4
41aaaaa1
42aaaaa2
43aaaaa3
44aaaaa4
51bb1
52bb2
53bb3

Please let me know if you need any further inputs.

Thanks and Regards,

-Ranit

(on Oracle 11.2.0.4.0)

This post has been answered by Solomon Yakobson on Oct 4 2015
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 1 2015
Added on Oct 4 2015
16 comments
1,090 views