Solved

PL/SQL for DB2 to re-initiate the sequences

Posted on 2013-12-20
9
863 Views
Last Modified: 2014-02-15
I want to drop the sequence and create a sequence in DB2, Following is the PL/SQL code I tried but showing error at DECLARE looks like some syntax error...

DECLARE
    TYPE seq_in_cur                     IS REF CURSOR;
    cur_set_seq                         seq_in_cur;
    sql_dyn                             VARCHAR2(2048);    
    v_count                             INTEGER := NULL;    
BEGIN

    sql_dyn := 'SELECT max(ID) from TL_GROUP';
    OPEN cur_set_seq FOR sql_dyn;
    FETCH cur_set_seq INTO v_count;
    v_count := v_count + 1;
    sql_dyn := 'drop sequence GROUP_SEQ';
    EXECUTE IMMEDIATE sql_dyn;
    sql_dyn := 'create sequence GROUP_SEQ start with ' || v_count || 'increment by 1 NOCACHE NOMAXVALUE NOMINVALUE';
    EXECUTE IMMEDIATE sql_dyn;
    CLOSE cur_set_seq;
END;

I had some data migration and want to re-initialize the sequences.
0
Comment
Question by:Saggi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
9 Comments
 
LVL 13

Expert Comment

by:Alexander Eßer [Alex140181]
ID: 39731485
C&P'ed in Oracle DB and it just looked fine, don't know about DB2?!?

What's the error?!
0
 

Author Comment

by:Saggi
ID: 39731494
It works in oracle but in Db2 error:

Parser Messages:
 line 1, col 1: Incorrect syntax near ''
0
 
LVL 13

Expert Comment

by:Alexander Eßer [Alex140181]
ID: 39731501
Could it be a problem with invisible characters or blank lines within the code?!
0
Increase Agility with Enabled Toolchains

Connect your existing build, deployment, management, monitoring, and collaboration platforms. From Puppet to Chef, HipChat to Slack, ServiceNow to JIRA, Splunk to New Relic and beyond, hand off data between systems to engage the right people.

Connect with xMatters.

 

Author Comment

by:Saggi
ID: 39731502
Nope
0
 

Author Comment

by:Saggi
ID: 39731503
There was other error:
Lookup Error - DB2 Database Error: ERROR [42601] [IBM][DB2/LINUXX8664] SQL0104N An unexpected token "<space>" was found following "TYPE". Expected tokens may include: "seq_in_cur".
0
 
LVL 13

Expert Comment

by:Alexander Eßer [Alex140181]
ID: 39731527
weird...
0
 
LVL 45

Accepted Solution

by:
Kent Olsen earned 500 total points
ID: 39731706
Hi Saggi,

DB2 SQL is different from Oracle SQL (which is different from Microsoft SQL which is different from MySQL SQL, etc...)

In addition, IBM supports three completely different versions of DB2, each with their own code base.  One version for their mainframe, one version for the AS/400, and another version for everyone else.  The required code will change depending on which version of DB2 you're using, and the release level.

That said, the easiest way to do what you're trying to do is with the ALTER SEQUENCE statement.

  ALTER SEQUENCE {sequence_name} RESTART WITH {new_value};

If you need to rename the sequence, you may have to as you suggest and drop and recreate it.  DB2/LUW has no provision for renaming a sequence.  Note that all objects that use the original sequence become invalid.  You'll have to recreate the triggers and other objects that used the sequence.

  DROP SEQUENCE {sequence_name};
  CREATE SEQUENCE {sequence_name} START WITH {first_value};

Also, the statement:

  SELECT max(ID) from TL_GROUP

should throw an error in most releases of DB2 when executed within a procedure.  The correct syntax would be:

  SELECT max(ID) INTO v_count ...


If you're using the sequence to assign unique (incrementing) integer values to each new column in a table, I suggest that you drop the Oracle sequence/trigger style and use the IDENTITY syntax.  It's common to DB2, SQL Server, MySQL and most all engines except Oracle.


Good Luck,
Kent
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In database programming, custom sort order seems to be necessary quite often, at least in my experience and time here at EE. Within the realm of custom sorting is the sorting of numbers and text independently (i.e., treating the numbers as number…
Recursive SQL in UDB/LUW (it really isn't that hard to do) Recursive SQL is most often used to convert columns to rows or rows to columns.  A previous article described the process of converting rows to columns.  This article will build off of th…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question