Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Database Server Software > Oracle Database

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-26-2008, 02:53 AM
BookerT
 
Posts: n/a
Default How to Alter DUAL table to change value

I am a novice user, but expected to do "Advanced things"

I have inherited some asp/vb code that queries and modifies an oracle
database. Some of the code in the database builds a Select Statement
from the DUAL table to generate the primary key sequence number for a
few tables (maybe just one, I have not determined the full scope yet).
One of my tables that I keep trying to add a record to through the asp
code keeps giving me a unique constraint error.

This happened, I believe because we had to reimport the database from
an earlier copy and thus numbers in the old tables reverted back to
lower numbers.

So for example, since new records have been added, my primary key id
number for one table is as high as 27348.

however when the code generates a number for the primary key id number,
it has a number like 27257. I need to change the DUAL table entry, so
that it starts at 27349 and that way when the code goes in and makes a
connection to the database, it will pick up 27349 and then sequence
from there.

How do I do that?

Currently in the code it goes:
SELECT Inquiries_seq.NextVal AS NextID
FROM DUAL



Thanks for any opinions.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 02-26-2008, 02:53 AM
bdbafh
 
Posts: n/a
Default Re: How to Alter DUAL table to change value



On Dec 13, 6:07 pm, "BookerT" <c...@ascac.org> wrote:
> I am a novice user, but expected to do "Advanced things"
>
> I have inherited some asp/vb code that queries and modifies an oracle
> database. Some of the code in the database builds a Select Statement
> from the DUAL table to generate the primary key sequence number for a
> few tables (maybe just one, I have not determined the full scope yet).
> One of my tables that I keep trying to add a record to through the asp
> code keeps giving me a unique constraint error.
>
> This happened, I believe because we had to reimport the database from
> an earlier copy and thus numbers in the old tables reverted back to
> lower numbers.
>
> So for example, since new records have been added, my primary key id
> number for one table is as high as 27348.
>
> however when the code generates a number for the primary key id number,
> it has a number like 27257. I need to change the DUAL table entry, so
> that it starts at 27349 and that way when the code goes in and makes a
> connection to the database, it will pick up 27349 and then sequence
> from there.
>
> How do I do that?
>
> Currently in the code it goes:
> SELECT Inquiries_seq.NextVal AS NextID
> FROM DUAL
>
> Thanks for any opinions.


were the insert triggers in place before the rows of data were imported
from the dump file?

-bdbafh

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 02-26-2008, 02:53 AM
EdStevens
 
Posts: n/a
Default Re: How to Alter DUAL table to change value


BookerT wrote:
> I am a novice user, but expected to do "Advanced things"
>
> I have inherited some asp/vb code that queries and modifies an oracle
> database. Some of the code in the database builds a Select Statement
> from the DUAL table to generate the primary key sequence number for a
> few tables (maybe just one, I have not determined the full scope yet).
> One of my tables that I keep trying to add a record to through the asp
> code keeps giving me a unique constraint error.
>
> This happened, I believe because we had to reimport the database from
> an earlier copy and thus numbers in the old tables reverted back to
> lower numbers.
>
> So for example, since new records have been added, my primary key id
> number for one table is as high as 27348.
>
> however when the code generates a number for the primary key id number,
> it has a number like 27257. I need to change the DUAL table entry, so
> that it starts at 27349 and that way when the code goes in and makes a
> connection to the database, it will pick up 27349 and then sequence
> from there.
>
> How do I do that?
>
> Currently in the code it goes:
> SELECT Inquiries_seq.NextVal AS NextID
> FROM DUAL
>
>
>
> Thanks for any opinions.


DUAL is a 'dummy' table that simply provides a target for the FROM
clause. You keys are not coming from the DUAL table, they are coming
from an object called a 'sequence'. In your case the name of the
sequence is 'Inquiries_seq'. To reset the 'nextval' of the sequence
'Inquiries_seq', you will have to drop and recreate it.

The rest is left as an exercise for the student.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 02-26-2008, 02:53 AM
DA Morgan
 
Posts: n/a
Default Re: How to Alter DUAL table to change value

BookerT wrote:
> I am a novice user, but expected to do "Advanced things"


Others have given you good advice.

With respect to your "Subject", above, altering DUAL is one way
to be quickly escorted to the door with a pink slip of paper
explaining how to find the unemployment office.
--
Daniel A. Morgan
University of Washington
damorgan@x.washington.edu
(replace x with u to respond)
Puget Sound Oracle Users Group
www.psoug.org
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 02-26-2008, 02:54 AM
EscVector
 
Posts: n/a
Default Re: How to Alter DUAL table to change value

BookerT, I feel for you man. I had to chuckle when I saw that you
wanted to modify DUAL. You are in the worst position possible: Not
getting paid for the work, but having to do it anyway, with no database
training. Or put another way, you have to "buy" the problem that you
shouldn't own. I guess you have your reasons.... but you are sitting
on the cliff edge.

If you have toad or other gui tool, extract the existing sequence ddl.

Edit the START WITH value and recreate the sequence.

Open the 9i or 10g sql ref for sequence create detail:
http://download-east.oracle.com/docs....htm#sthref196
http://download-east.oracle.com/docs...ments_615a.htm

If you don't have gui tool you can get the ddl via sql/plus

set pagesize 0
set long 90000
SELECT DBMS_METADATA.GET_DDL
(
'SEQUENCE',' INQUIRIES_SEQ','')
FROM DUAL;


If you are really cool, you could use .NET, ADO.net and ADOX to create
the sequence in Oracle via powershell script, but that might be over
kill... but it would be advanced.

On Dec 13, 6:07 pm, "BookerT" <c...@ascac.org> wrote:
> I am a novice user, but expected to do "Advanced things"
>
> I have inherited some asp/vb code that queries and modifies an oracle
> database. Some of the code in the database builds a Select Statement
> from the DUAL table to generate the primary key sequence number for a
> few tables (maybe just one, I have not determined the full scope yet).
> One of my tables that I keep trying to add a record to through the asp
> code keeps giving me a unique constraint error.
>
> This happened, I believe because we had to reimport the database from
> an earlier copy and thus numbers in the old tables reverted back to
> lower numbers.
>
> So for example, since new records have been added, my primary key id
> number for one table is as high as 27348.
>
> however when the code generates a number for the primary key id number,
> it has a number like 27257. I need to change the DUAL table entry, so
> that it starts at 27349 and that way when the code goes in and makes a
> connection to the database, it will pick up 27349 and then sequence
> from there.
>
> How do I do that?
>
> Currently in the code it goes:
> SELECT Inquiries_seq.NextVal AS NextID
> FROM DUAL
>
> Thanks for any opinions.


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 02-26-2008, 02:54 AM
EscVector
 
Posts: n/a
Default Re: How to Alter DUAL table to change value

I think most unemployment offices are now online. Sorry! Couldn't
resist.

On Dec 13, 7:01 pm, DA Morgan <damor...@psoug.org> wrote:
> BookerT wrote:
> > I am a novice user, but expected to do "Advanced things"Others have given you good advice.

>
> With respect to your "Subject", above, altering DUAL is one way
> to be quickly escorted to the door with a pink slip of paper
> explaining how to find the unemployment office.
> --
> Daniel A. Morgan
> University of Washington
> damor...@x.washington.edu
> (replace x with u to respond)
> Puget Sound Oracle Users Groupwww.psoug.org


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 02-26-2008, 02:54 AM
EscVector
 
Posts: n/a
Default Re: How to Alter DUAL table to change value

Sorry for multiposting, but just thought of something else.

Notice: don't do any of this unless you have a backup.

If you can logon as sysdba and can also shutdown the db, you could try
the following:
(modify the schema to work on your system)
================================================== =========

select 'alter sequence your_schema_here.Inquiries_seq cache ' ||
((27349 - your_schema_here.Inquiries_seq.nextval)-2) ||';' "run sql
below: "from dual;

-- copy/past above statement
-- (my example generayour_schema_here this: alter sequence
Inquiries_seq cache 90

shutdown abort;
startup;

select your_schema_here.inquiries_seq.nextval from dual;

shutdown abort;
startup;

select your_schema_here.inquiries_seq.nextval from dual;

select
dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
from dual;

alter sequence your_schema_here.inquiries_seq nocache;

select
dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
from dual;









BookerT wrote:
> I am a novice user, but expected to do "Advanced things"
>
> I have inherited some asp/vb code that queries and modifies an oracle
> database. Some of the code in the database builds a Select Statement
> from the DUAL table to generate the primary key sequence number for a
> few tables (maybe just one, I have not determined the full scope yet).
> One of my tables that I keep trying to add a record to through the asp
> code keeps giving me a unique constraint error.
>
> This happened, I believe because we had to reimport the database from
> an earlier copy and thus numbers in the old tables reverted back to
> lower numbers.
>
> So for example, since new records have been added, my primary key id
> number for one table is as high as 27348.
>
> however when the code generates a number for the primary key id number,
> it has a number like 27257. I need to change the DUAL table entry, so
> that it starts at 27349 and that way when the code goes in and makes a
> connection to the database, it will pick up 27349 and then sequence
> from there.
>
> How do I do that?
>
> Currently in the code it goes:
> SELECT Inquiries_seq.NextVal AS NextID
> FROM DUAL
>
>
>
> Thanks for any opinions.


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #8 (permalink)  
Old 02-26-2008, 02:55 AM
Vladimir M. Zakharychev
 
Posts: n/a
Default Re: How to Alter DUAL table to change value

EscVector wrote:
> Sorry for multiposting, but just thought of something else.
>
> Notice: don't do any of this unless you have a backup.
>
> If you can logon as sysdba and can also shutdown the db, you could try
> the following:
> (modify the schema to work on your system)
> ================================================== =========
>
> select 'alter sequence your_schema_here.Inquiries_seq cache ' ||
> ((27349 - your_schema_here.Inquiries_seq.nextval)-2) ||';' "run sql
> below: "from dual;
>
> -- copy/past above statement
> -- (my example generayour_schema_here this: alter sequence
> Inquiries_seq cache 90
>
> shutdown abort;
> startup;
>
> select your_schema_here.inquiries_seq.nextval from dual;
>
> shutdown abort;
> startup;
>
> select your_schema_here.inquiries_seq.nextval from dual;
>
> select
> dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
> from dual;
>
> alter sequence your_schema_here.inquiries_seq nocache;
>
> select
> dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
> from dual;
>
>
>
>
>
>
>
>
>
> BookerT wrote:
> > I am a novice user, but expected to do "Advanced things"
> >
> > I have inherited some asp/vb code that queries and modifies an oracle
> > database. Some of the code in the database builds a Select Statement
> > from the DUAL table to generate the primary key sequence number for a
> > few tables (maybe just one, I have not determined the full scope yet).
> > One of my tables that I keep trying to add a record to through the asp
> > code keeps giving me a unique constraint error.
> >
> > This happened, I believe because we had to reimport the database from
> > an earlier copy and thus numbers in the old tables reverted back to
> > lower numbers.
> >
> > So for example, since new records have been added, my primary key id
> > number for one table is as high as 27348.
> >
> > however when the code generates a number for the primary key id number,
> > it has a number like 27257. I need to change the DUAL table entry, so
> > that it starts at 27349 and that way when the code goes in and makes a
> > connection to the database, it will pick up 27349 and then sequence
> > from there.
> >
> > How do I do that?
> >
> > Currently in the code it goes:
> > SELECT Inquiries_seq.NextVal AS NextID
> > FROM DUAL
> >
> >
> >
> > Thanks for any opinions.


1) Please do not top-post;
2) what you propose is extremely dangerous. Sequences can be rolled
forward way easier without the need for SYSDBA privileges or shutting
the db down in unsafe ways:

REM You need to run this in SQL*Plus
acc desired_val prompt "Desired NEXTVAL for your sequence: "
set trimspool on termout off heading off feedback off echo off verify
off
col currval new_value curr_val noprint
select Inquiries_Seq.Nextval currval from dual;
select 'ALTER SEQUENCE Inquiries_Seq INCREMENT BY '||
to_char(&desired_val-1-&curr_val)||' NOCACHE;' from dual;

spool temp.sql
/
spool off
@@temp.sql

REM Remove temporary file, choose one of the two versions below
REM If you're on Unix...
host rm temp.sql
REM If you're on Windows...
host del temp.sql

SELECT Inquiries_Seq.nextval from dual;
ALTER SEQUENCE Inquiries_Seq INCREMENT BY 1 CACHE 20;

REM Verify the outcome
set termout on heading on feedback on
SELECT Inquiries_Seq.nextval from dual;

Hth,
Vladimir M. Zakharychev
N-Networks, makers of Dynamic PSP(tm)
http://www.dynamicpsp.com

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #9 (permalink)  
Old 02-26-2008, 02:55 AM
EscVector
 
Posts: n/a
Default Re: How to Alter DUAL table to change value



On Dec 14, 1:13 pm, "Vladimir M. Zakharychev"
<vladimir.zakharyc...@gmail.com> wrote:
EscVector wrote:
> > Sorry for multiposting, but just thought of something else.

>
> > Notice: don't do any of this unless you have a backup.

>
> > If you can logon as sysdba and can also shutdown the db, you could try
> > the following:
> > (modify the schema to work on your system)
> > ================================================== =========

>
> > select 'alter sequence your_schema_here.Inquiries_seq cache ' ||
> > ((27349 - your_schema_here.Inquiries_seq.nextval)-2) ||';' "run sql
> > below: "from dual;

>
> > -- copy/past above statement
> > -- (my example generayour_schema_here this: alter sequence
> > Inquiries_seq cache 90

>
> > shutdown abort;
> > startup;

>
> > select your_schema_here.inquiries_seq.nextval from dual;

>
> > shutdown abort;
> > startup;

>
> > select your_schema_here.inquiries_seq.nextval from dual;

>
> > select
> > dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
> > from dual;

>
> > alter sequence your_schema_here.inquiries_seq nocache;

>
> > select
> > dbms_metadata.get_ddl('SEQUENCE','INQUIRIES_SEQ',' your_schema_here')
> > from dual;

>
> > BookerT wrote:
> > > I am a novice user, but expected to do "Advanced things"

>
> > > I have inherited some asp/vb code that queries and modifies an oracle
> > > database. Some of the code in the database builds a Select Statement
> > > from the DUAL table to generate the primary key sequence number for a
> > > few tables (maybe just one, I have not determined the full scope yet).
> > > One of my tables that I keep trying to add a record to through the asp
> > > code keeps giving me a unique constraint error.

>
> > > This happened, I believe because we had to reimport the database from
> > > an earlier copy and thus numbers in the old tables reverted back to
> > > lower numbers.

>
> > > So for example, since new records have been added, my primary key id
> > > number for one table is as high as 27348.

>
> > > however when the code generates a number for the primary key id number,
> > > it has a number like 27257. I need to change the DUAL table entry, so
> > > that it starts at 27349 and that way when the code goes in and makes a
> > > connection to the database, it will pick up 27349 and then sequence
> > > from there.

>
> > > How do I do that?

>
> > > Currently in the code it goes:
> > > SELECT Inquiries_seq.NextVal AS NextID
> > > FROM DUAL

>
> > > Thanks for any opinions.1) Please do not top-post;

> 2) what you propose is extremely dangerous. Sequences can be rolled
> forward way easier without the need for SYSDBA privileges or shutting
> the db down in unsafe ways:
>
> REM You need to run this in SQL*Plus
> acc desired_val prompt "Desired NEXTVAL for your sequence: "
> set trimspool on termout off heading off feedback off echo off verify
> off
> col currval new_value curr_val noprint
> select Inquiries_Seq.Nextval currval from dual;
> select 'ALTER SEQUENCE Inquiries_Seq INCREMENT BY '||
> to_char(&desired_val-1-&curr_val)||' NOCACHE;' from dual;
>
> spool temp.sql
> /
> spool off
> @@temp.sql
>
> REM Remove temporary file, choose one of the two versions below
> REM If you're on Unix...
> host rm temp.sql
> REM If you're on Windows...
> host del temp.sql
>
> SELECT Inquiries_Seq.nextval from dual;
> ALTER SEQUENCE Inquiries_Seq INCREMENT BY 1 CACHE 20;
>
> REM Verify the outcome
> set termout on heading on feedback on
> SELECT Inquiries_Seq.nextval from dual;
>
> Hth,
> Vladimir M. Zakharychev
> N-Networks, makers of Dynamic PSP(tm)
> http://www.dynamicpsp.com


"Sequences can be rolled
forward way easier without the need for SYSDBA privileges or shutting
the db down in unsafe ways:"

Of course they can. There is some humor to this post, which is why I
put in this second option.

I was offering a creative alternative to the blindly simple.

Dangerous, as it may be, I did test it and it is an option, but I like
your option better.


Sorry for the top post.





....

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #10 (permalink)  
Old 02-26-2008, 02:55 AM
Vince
 
Posts: n/a
Default Re: How to Alter DUAL table to change value


EdStevens wrote:
> BookerT wrote:
> > I am a novice user, but expected to do "Advanced things"
> >
> > I have inherited some asp/vb code that queries and modifies an oracle
> > database. Some of the code in the database builds a Select Statement
> > from the DUAL table to generate the primary key sequence number for a
> > few tables (maybe just one, I have not determined the full scope yet).
> > One of my tables that I keep trying to add a record to through the asp
> > code keeps giving me a unique constraint error.
> >
> > This happened, I believe because we had to reimport the database from
> > an earlier copy and thus numbers in the old tables reverted back to
> > lower numbers.
> >
> > So for example, since new records have been added, my primary key id
> > number for one table is as high as 27348.
> >
> > however when the code generates a number for the primary key id number,
> > it has a number like 27257. I need to change the DUAL table entry, so
> > that it starts at 27349 and that way when the code goes in and makes a
> > connection to the database, it will pick up 27349 and then sequence
> > from there.
> >
> > How do I do that?
> >
> > Currently in the code it goes:
> > SELECT Inquiries_seq.NextVal AS NextID
> > FROM DUAL
> >
> >
> >
> > Thanks for any opinions.

>
> DUAL is a 'dummy' table that simply provides a target for the FROM
> clause. You keys are not coming from the DUAL table, they are coming
> from an object called a 'sequence'. In your case the name of the
> sequence is 'Inquiries_seq'. To reset the 'nextval' of the sequence
> 'Inquiries_seq', you will have to drop and recreate it.
>
> The rest is left as an exercise for the student.


Alternative to dropping and recreating sequences (and upsetting any
dependancies based on them), you could just spin the sequence to the
right number:

DECLARE

seqvalue NUMBER;
tcount NUMBER;

BEGIN

SELECT MAX(primary_key_column)
INTO tcount
FROM mytable;

SELECT my_sequence.NEXTVAL
INTO seqvalue
FROM dual;

WHILE seqvalue < tcount LOOP

EXECUTE IMMEDIATE 'select my_sequence.nextval from dual' INTO
seqvalue;

END LOOP;

END;

If your supporting sequences are named in such a way that they can be
derived from their corresponding table names, you could even automate
doing all of them within a similar procedure.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 02:32 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
UnixAdminTalk.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427