?
Solved

Getting ORA-00911:invalid character when using "ORDER BY" in dynamic SQL statement using Oracle.DataAccess

Posted on 2010-11-22
7
Medium Priority
?
705 Views
Last Modified: 2012-05-10
Hi:

I'm running into some issues using the Oracle.DataAcess.Client.OracleAdapter.
If my dynamic sql contains an "ORDER BY" clause, then I get the following exception:
ORA-00911:invalid character



Here is a coding snippet outlining the issue:
-------------------------------------------------------
using (OracleConnection oraconn = new OracleConnection(dataConn))
{
    oraconn.Open();

    Oracle.DataAccess.Client.OracleCommand cmd = new OracleCommand(sOraSQL, oraconn);
    cmd.CommandType = CommandType.Text;
    Oracle.DataAccess.Client.OracleDataAdapter da = new OracleDataAdapter(cmd);

    DataTable dt = new DataTable();
    da.Fill(dt);

    oraconn.Close();
    return dt;
}

If I use the following SQL string, it works fine.
----------------------------------------------------------
String sOraSQL = "SELECT a, b from table_foo;"



If I add an "ORDER BY" clause, I get the exception
----------------------------------------------------------
String sOraSQL = "SELECT a, b from table_foo ORDER BY a ASC;"




I'm using the following reference in my solution:
------------------------------------------------------------
Oracle.DataAccess
Runtime Version V1.0.3705
Version 10.2.0.100

0
Comment
Question by:jxbma
[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
7 Comments
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 2000 total points
ID: 34194275
Remove the semi-colons.
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 34194280
Without the trailing ';' in the statement - does that cure it?
0
 
LVL 28

Expert Comment

by:Naveen Kumar
ID: 34194297
Can you try this :

String sOraSQL = "SELECT a, b from table_foo ORDER BY 1 ;"  

--> no need of ASC keyword because default is ASC only

If it still does not work, can you try it without the semicolon at the end.

String sOraSQL = "SELECT a, b from table_foo ORDER BY 1"

Thanks

0
Technology Partners: 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!

 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 34194571
I also must presume that the ";" in the sql should be removed ...
0
 
LVL 28

Expert Comment

by:Naveen Kumar
ID: 34194594
But surprising thing is the below from question author.

If I use the following SQL string, it works fine.
----------------------------------------------------------
String sOraSQL = "SELECT a, b from table_foo;"

--> ; is still present in the above as well.  I can think of a typo while typing here or something like that.

0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 34194915
One other thought which might not be relevant.
I assume a is a placeholder but what is the actual name?  Maybe it requires square braces because it contains an invalid character (though why it is OK in the SELECT part is beyond me - unless it doesn't actually appear in the select part)

ie.
String sOraSQL = "SELECT a, b from table_foo ORDER BY [Column One] ASC;"


because
String sOraSQL = "SELECT a, b from table_foo ORDER BY Column One ASC;"
is giving it problems
0
 
LVL 28

Expert Comment

by:Naveen Kumar
ID: 34195132
Got something of this sort in mind and hence suggested to use "order by 1" as posted in my previous updates.

thanks,
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
This video explains at a high level about the four available data types in Oracle and how dates can be manipulated by the user to get data into and out of the database.
Via a live example, show how to take different types of Oracle backups using RMAN.
Suggested Courses

764 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