Question

Reordering from a query in Oracle

Asked by: BobCSD

I want to reorder the listOrder value from a query (not stored procedure), and have written this query to reorder all the columns in the table. Ultimately, I'll be replacing the "1" value with a parameter value, but for now I'm hard-coding it to the ID #1.

                      Update(TBL_QUESTIONVALUE)
                       Set ListOrder = ListOrderTable.newListOrder
                       FROM(TBL_QUESTIONVALUE)
                       INNER JOIN
                       (SELECT questionValueId,
                       row_number() over (order by ListOrder, 1) newListOrder
                       from(TBL_QUESTIONVALUE)
                       where questionSetId = 1 or (questionSetId is Null and 1 is Null))) ListOrderTable
                       ON TBL_QUESTIONVALUE.questionValueId = ListOrderTable.questionValueID AND
                       TBL_QUESTIONVALUE.listOrder <> ListOrderTable.newListOrder    

It sets the listorder of all the records based on the values stored in a new table created, ListOrderTable.

Oracle errors there is a missing Select KEYWORD.

I am really unsure what to do next. Please help.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-08-24 at 12:05:27ID24677636
Topics

Oracle 10.x

,

Programming for ASP.NET

,

PL / SQL

Participating Experts
2
Points
500
Comments
21

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. How to reorder rows in datagridview
    Hi, How to reorder rows in datagridview e.g dg bound by datatable dt col1 col2 col3 a b c e f g check condition if dt.rows.contains("e") then i need to reorder like col1 col2 col3 e f g -----entire row gets shifted t...
  2. Reorder rows using SQL
    I have a table with the following columns: ItemID Name Order 555 Greg 1 585 John 2 372 Alex 3 324 Joyce 4 I would like to reorder the rows based on the Order colu...
  3. reorder xml
    i need a sample for reordering xml nodes with unlimited parent node system

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: angelIIIPosted on 2009-08-24 at 12:11:36ID: 25171400

in oracle , you cannot "JOIN" for update.
this should do th ejob:

with sq as (
  select questionValueID row_number() over (order by ListOrder, 1) newListOrder
    from TBL_QUESTIONVALUE
   where questionSetId = 1 
      or (questionSetId is Null and 1 is Null)
)
Update TBL_QUESTIONVALUE qv
  Set ListOrder = ( select sq.newListOrder
                      from sq
                     where sq.questionValueId = qv.questionValueID 
                   )
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

Select allOpen in new window

 

by: BobCSDPosted on 2009-08-24 at 12:16:30ID: 25171438

When I run it in my Server Explorer window it errors:

ORA-00923: FROM keyword not found where expected.

Is this something I can run from a ExecuteNonQuery? I don't have to create a stored procedure?

thanks.

 

by: mrjoltcolaPosted on 2009-08-24 at 12:24:50ID: 25171526

Actually you can join for an update. It is an inline view and will be faster than a subquery, but that may not be important for this question since angelIII has already provided an option.

A simple update against an inline view is:

UPDATE (SELECT a.col1 as a_col1, b.col1 as b_col1
        FROM a INNER JOIN b
        ON (a.id = b.id)
       )
SET a_col1 = b_col1
;
                                              
1:
2:
3:
4:
5:
6:

Select allOpen in new window

 

by: angelIIIPosted on 2009-08-24 at 12:31:00ID: 25171573

I missed a "," in my query

with sq as (
  select questionValueID, row_number() over (order by ListOrder, 1) newListOrder
    from TBL_QUESTIONVALUE
   where questionSetId = 1 
      or (questionSetId is Null and 1 is Null)
)
Update TBL_QUESTIONVALUE qv
  Set ListOrder = ( select sq.newListOrder
                      from sq
                     where sq.questionValueId = qv.questionValueID 
                   )

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

Select allOpen in new window

 

by: BobCSDPosted on 2009-08-24 at 12:40:42ID: 25171685

Gives the same error.

with sq as (
  select questionValueID, row_number() over (order by ListOrder, 1) newListOrder
    from TBL_QUESTIONVALUE
   where questionSetId = 1 
      or (questionSetId is Null and 1 is Null)
)
Update TBL_QUESTIONVALUE qv
  Set ListOrder = ( select sq.newListOrder
                      from sq
                     where sq.questionValueId = qv.questionValueID 
                   )

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

Select allOpen in new window

 

by: angelIIIPosted on 2009-08-24 at 12:46:14ID: 25171739

>Is this something I can run from a ExecuteNonQuery? I don't have to create a stored procedure?
ah, I see that now..
possibly yes. I have seen with both OleDbconnection/command as well as over linked server, this is problematic.
a stored procedure (or function with autonomous transaction) will help there.

 

by: BobCSDPosted on 2009-08-24 at 13:04:24ID: 25171959

None-the-less, it still errors, and I asked for a sql query command. This is not working for me.

What can I do to get it to work?

thanks.

 

by: mrjoltcolaPosted on 2009-08-24 at 14:16:00ID: 25172698

You cannot use WITH ... UPDATE like that.

Also, some parts of the SQL do not make sense.

>> where questionSetId = 1 or (questionSetId is Null and 1 is Null)

'1' will never be null, so the part inside parentheses is useless.


Lastly, you are ordering by listOrder, so it seems you want to order a subset of questions, for example, questionSetId 2, by a sequential value. So if they were (10, 11, 12) you'd reorder them to (1, 2, 3) independent of orders for other sets.

If so, try this:

update TBL_QUESTIONVALUE qv
  set ListOrder = (select newListOrder from
                    (select questionValueID, row_number() over (order by ListOrder, 1) newListOrder
                     from TBL_QUESTIONVALUE
                     where questionSetId = 1
                     ) sq
                     where sq.questionValueId = qv.questionValueID 
                   )
 where qv.questionSetId = 1
;
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

Select allOpen in new window

 

by: BobCSDPosted on 2009-08-24 at 14:27:16ID: 25172803

In regard to the number 1... I said:

>>Ultimately, I'll be replacing the "1" value with a parameter value, but for now I'm hard-coding it to the ID #1.

So yes, the 1 parameter value could ultimately be null.

 

by: BobCSDPosted on 2009-08-24 at 14:28:10ID: 25172815

>>Lastly, you are ordering by listOrder, so it seems you want to order a subset of questions,

Correct.

 

by: BobCSDPosted on 2009-08-24 at 14:36:20ID: 25172876


where qv.questionSetId = 1
Error at line 1
ORA-00933: SQL command not properly ended

 

by: BobCSDPosted on 2009-08-24 at 14:37:10ID: 25172885

this much is good:

select questionValueID, row_number() over (order by ListOrder, 1) newListOrder
                    from TBL_QUESTIONVALUE
                    where questionSetId = 1

It returns the newlistorder as expected. But when combining the whole thing, it errors as per previous post.

 

by: angelIIIPosted on 2009-08-24 at 14:38:50ID: 25172901

what version of oracle are you using?

 

by: mrjoltcolaPosted on 2009-08-24 at 16:26:32ID: 25173481

I tested it on this test table prior to posting the code snippet.

SQL> desc tbl_questionvalue
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 QUESTIONVALUEID                           NOT NULL NUMBER(38)
 QUESTIONSETID                                      NUMBER(38)
 LISTORDER                                          NUMBER(38)


Post your table structure so we can all be on the same page.

 

by: BobCSDPosted on 2009-08-25 at 06:01:29ID: 25177041

I am using Oracle10g.

Attached is the sql I used to create the tables.

create sequence QuestionSetId_seq start with 1;
DROP TABLE tbl_QuestionSet;
CREATE TABLE tbl_QuestionSet
(
  QuestionSetId				   NUMBER       NOT NULL,
  QuestionSetName			   VARCHAR2(50),
  QuestionTypeListValueId     NUMBER,  
  dateCreated    DATE,
  dateUpdated    DATE,
  userCreatedId  NUMBER,
  userUpdatedId  NUMBER
)
 
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;
 
 
ALTER TABLE tbl_QuestionSet ADD (
  CONSTRAINT tbl_QuestionSet_PK
 PRIMARY KEY
 (QuestionSetId));
 
 
 
create sequence QuestionValueId_seq start with 1;
 
DROP TABLE tbl_QuestionValue;
CREATE TABLE tbl_QuestionValue
(
  QuestionValueId			   NUMBER     NOT NULL,
  QuestionSetId				   NUMBER,
  QuestionValueName     VARCHAR2(2000),
  QuestionToolTip  VARCHAR2(2000),
  ListOrder					NUMBER,
  YesNoIncludedListValueId				NUMBER,
  TextRequiredListValueId	NUMBER,
  StatusListValueId			NUMBER,
  DateCreated    DATE,
  DateUpdated    DATE,
  UserCreatedId  NUMBER,
  UserUpdatedId  NUMBER
)
 
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;
 
 
ALTER TABLE tbl_QuestionValue ADD (
  CONSTRAINT tbl_QuestionValue_PK
 PRIMARY KEY
 (QuestionValueId));
                                              
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:

Select allOpen in new window

 

by: BobCSDPosted on 2009-08-25 at 06:05:39ID: 25177083

wait a second.

I just now ran it and it updated 6 rows.

yesterday it gave methat error.

go figure.

 

by: BobCSDPosted on 2009-08-25 at 07:05:28ID: 25177704

This is nuts. I ran it once, and it ran and updated 6 rows.

I've tried it numerous times since, and it runs more than 6 minutes and I finally cancel it.

Why would that happen?

I can't get it to run again. Any ideas?

Sorry.

 

by: BobCSDPosted on 2009-08-25 at 07:11:27ID: 25177765

I closed Toad and restarted it, and it ran fine again.

Then I reran it immediately after and it hung up again.

Must be a toad issue, maybe. If you have ideas, I'd appreciate it, but I'm going to close this out.

Thanks!

 

by: BobCSDPosted on 2009-08-25 at 07:12:35ID: 31619823

thanks!

 

by: angelIIIPosted on 2009-08-25 at 07:36:24ID: 25178031

it looks like you have locking / transaction issues...
you might need to "commit" before rerunning the next udpate ...

 

by: mrjoltcolaPosted on 2009-08-25 at 08:08:35ID: 25178381

I've noted this behavior before on my own and so have my developers, when using F5 / Run as Script. When I develop / test, I usually use F9 in Toad. If I have large scripts, I jump out to sqlplus instead.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...