Return statement executed before soapresult is set
In my method i'm doing a soap call.
The return statement is executed before de soapresultset is read.
is there a way to "delay" the return statement
Your question doesn't make any sense. Execution leaves the method when it ends or when the return statement is reached. If you want something to happen before the return, then do it before you call return.
My guess at this point is that you're using exceptions poorly.
Similar Messages
-
Insert statement executes before If statements
Hello All,
I am trying to validate few fields before inserting them into table.
for example:
IF params('txtID') IS NULL THEN
"SOME MSG";
ELSIF params('txtName') IS NULL THEN
"SOME MSG";
END IF;
INSERT INTO TABLE T1
VALUES(params('txtID'),params('txtName');
What I want to do is : I want to validate two fields before inserting.
Can anyone help me?
Thank you,
H.It directly executes insert statement. If I delete insert, it executes that IF statement.
It is strange.Let's be clear about this, it is not strange. Your original IF statements did execute before the INSERT but they did not raise an exception. Consequently the INSERT statement was processed. Your "SOME MSG" mechanism is obviously only triggered after the procedure completed. Walter's solution worked for you because it raise exceptions, which prevented the INSERT statement from executing.
Anyway, it is obvious that you haven't got NOT NULL enforced on your table, which is A Bad Thing. You shoudn't be enforcing such constraints through a procedure.
Cheers, APC
blog: http://radiofreetooting.blogspot.com
Edited by: APC on Feb 3, 2009 5:48 PM
Only because the OP edited their final post, and removed the lines I quoted. -
Missing return statement error
public class Member
public int Member(String memberid, String memberpw)
String cs = "jdbc:oracle:thin:@255.255.255.255:1000:a123stud";
String user = "123456";
String pass = "123456";
String member = "member_id";
try
Class.forName("oracle.jdbc.driver.OracleDriver");
//Connection conn = DriverManager.getConnection("jdbc:odbc:myOracle");
Connection conn = DriverManager.getConnection(cs,user,pass);
Statement stmt = conn.createStatement();
String query = "SELECT * FROM members";
ResultSet rs = stmt.executeQuery(query);
// ResultSet rs = stmt.executeQuery("SELECT * FROM members WHERE member_id = 'M0001'");
int counter = 0;
while(rs.next())
member = rs.getString("member_id");
counter++;
if (counter == 0)
return 0;
else
return 1;
//System.out.println("\nOracle10g at 255.255.255.255 is working!");
catch(SQLException e)
System.out.println("\n\nException Occured " +
"(Incorrect IP address, Server may be down, or SQL Exception)");
e.printStackTrace();
catch(ClassNotFoundException e)
System.out.println("\n\nException Occured (CLASSNOTFOUND Exception)");
}It says i am missing the return statement,but i do have set return something,whats the error? thx for helpingFor example, what happens if the SQL query doesn't
return any rows, and rs.next() is never true?The while() loop will be skipped and the if statement
will execute, which has two branches, one of which is
guaranteed to return?Oops. My bad.
I thought the ifs were inside the while.
Okay, the problem here is with the exception handling. Catching and logging and doing nothing else is usually almost as bad as just smothering them. In this case it's especially true because the method then just continues after the catch blocks, in which case there's no return.
You have to actually handle the exceptions if you're not going to propagate them. In this case, that would mean returning some reasonable default value. I'd say that's not a good idea here, and you're better off to just let the exceptions be thrown, or wrap and rethrow in your own exception. -
Problems with asynchronous(?) function call before return statement
I have a function as following inside a class deriving from CustomNode:
override protected function create () : Node {
parseContent();
return group;
}parseContent() executes a HttpRequest and then a PullParser. At least that's what it should do. But actually, it doesn't. Is this because the HttpRequest is asynchronous and is "cancelled" because of the return statement? Or can't this be the problem?You would have to update or create the view in the finally block of the onOutput: or onInput methods within the request.
You could also try
var viewContent: Node;
override protected function create () : Node {
parseContent();
FX.deferAction(function():Void{
viewContent = group;
return Group{ content: bind viewContent }
}I never tried that, but it might work.
Another option is to bind the parsed content to whatever view you are pushing it to. Then whenever the request is done, the view will populate its content on the change of the variable where the content is stored.
Example:
var allTables: TableModel[];
//***************start of table list decleration****************************\\
public var list: SwingJList = SwingJList {
var shortcutKey: Boolean = false;
focusTraversable: true
selectedIndex: 0
action: function(){
FX.deferAction(function():Void{
openButton.fire();
items: bind for( table in allTables ){
table.name
var searchDataXml = xmlGenerator.generateSearchXMLString(searchData);
var contentLength: Integer = searchDataXml.getBytes().length;
def postRequest: HttpRequest = HttpRequest {
location: "{WEB_APPLICATION_REQUEST_URL}searchData/?database={DATABASE_KEY}";
method: HttpRequest.POST;
headers: [
HttpHeader {
name: HttpHeader.CONTENT_TYPE;
value: "application/xml";
HttpHeader {
name: HttpHeader.CONTENT_LENGTH;
value: "{contentLength}";
onStarted: function() {
println("onStarted - started performing method: {postRequest.method} on location: {postRequest.location}");
onConnecting: function() { println("onConnecting") }
onDoneConnect: function() { println("onDoneConnect") }
onWriting: function() { println("onWriting") }
onOutput: function(os: java.io.OutputStream) {
try {
os.write(searchDataXml.getBytes());
} finally {
println("onOutput - about to close output stream.");
os.close();
os.flush();
onToWrite: function(bytes: Long) { println("onToWrite - entire content to be written: {bytes} bytes") }
onWritten: function(bytes: Long) { println("onWritten - {bytes} bytes has now been written") }
onDoneWrite: function() { println("doneWrite") }
onReadingHeaders: function() { println("onReadingHeaders") }
onResponseCode: function(code:Integer) { println("onResponseCode - responseCode: {code}") }
onResponseMessage: function(msg:String) { println("onResponseMessage - responseMessage: {msg}") }
onResponseHeaders: function(headerNames: String[]) {
println("onResponseHeaders - there are {headerNames.size()} response headers:");
for (name in headerNames) {
println(" {name}: {postRequest.getResponseHeaderValue(name)}");
onReading: function() { println("onReading") }
onToRead: function(bytes: Long) {
if (bytes < 0) {
println("onToRead - Content length not specified by server; bytes: {bytes}");
} else {
println("onToRead - total number of content bytes to read: {bytes}");
onRead: function(bytes: Long) {
// The toread variable is non negative only if the server provides the content length
def progress =
if (postRequest.toread > 0) "({(bytes * 100 / postRequest.toread)}%)" else "";
println("onRead - bytes read: {bytes} {progress}");
var parser = new XmlPullParser();
onInput: function(is: java.io.InputStream) {
// use input stream to access content here.
// can use input.available() to see how many bytes are available.
try {
allTables = parser.processResults(is);
} finally {
is.close();
onException: function(ex: java.lang.Exception) {
println("onException - exception: {ex.getClass()} {ex.getMessage()}");
onDoneRead: function() { println("onDoneRead") }
onDone: function() { println("onDone") }
postRequest.start();
} In this case an array of tableModel names are bound to the list view.
When the httprequest ends, it sets the parsed tableModel array to the array declared in this class.
The list view will populate the table names from the array when the request finishes. -
Question:
There is a scenario that users want to send multiple rows returned by Execute SQL Task as Email content to send to someone. With Execute SQL Task, the Full result set is used when the query returns multiple rows, it must map to a variable of the Object data
type, then the return result is a rowset object, so we cannot directly send the result variable as Email content. Is there a way that we can extract the table row values that are stored in the Object variable as Email content to send to someone?
Answer:
To achieve this requirement, we can use a Foreach Loop container to extract the table row values that are stored in the Object variable into package variables, then use a Script Task to write the data stored in packages variables to a variable, and then set
the variable as MessageSource in the Send Mail Task.
Add four variables in the package as below:
Double-click the Execute SQL Task to open the Execute SQL Task Editor, then change the ResultSet property to “Full result set”. Assuming that the SQL Statement like below:
SELECT Category, CntRecords
FROM [table_name]
In the Result Set pane, add a result like below (please note that we must use 0 as the result set name when the result set type is Full result set):
Drag a Foreach Loop Container connects to the Execute SQL Task.
Double-click the Foreach Loop Container to open the Foreach Loop Editor, in the Collection tab, change the Enumerator to Foreach ADO Enumerator, then select User:result as ADO object source variable.
Click the Variable Mappings pane, add two Variables as below:
Drag a Script Task within the Foreach Loop Container.
The C# code that can be used only in SSIS 2008 and above in Script Task as below:
public void Main()
// TODO: Add your code here
Variables varCollection = null;
string message = string.Empty;
Dts.VariableDispenser.LockForWrite("User::Message");
Dts.VariableDispenser.LockForWrite("User::Category");
Dts.VariableDispenser.LockForWrite("User::CntRecords");
Dts.VariableDispenser.GetVariables(ref varCollection);
//Format the query result with tab delimiters
message = string.Format("{0}\t{1}\n",
varCollection["User::Category"].Value,
varCollection["User::CntRecords"].Value
varCollection["User::Message"].Value = varCollection["User::Message"].Value + message;
Dts.TaskResult = (int)ScriptResults.Success;
The VB code that can be used only in SSIS 2005 and above in Script Task as below, please note that in SSIS 2005, we should
change PrecompileScriptIntoBinaryCode property to False and Run64BitRuntime property to False
Public Sub Main()
' Add your code here
Dim varCollection As Variables = Nothing
Dim message As String = String.Empty
Dts.VariableDispenser.LockForWrite("User::Message")
Dts.VariableDispenser.LockForWrite("User::Category")
Dts.VariableDispenser.LockForWrite("User::CntRecords")
Dts.VariableDispenser.GetVariables(varCollection)
'Format the query result with tab delimiters
message = String.Format("{0}" & vbTab & "{1}" & vbLf, varCollection("User::Category").Value, varCollection("User::CntRecords").Value)
varCollection("User::Message").Value = DirectCast(varCollection("User::Message").Value,String) + message
Dts.TaskResult = ScriptResults.Success
End Sub
Drag Send Mail Task to Control Flow pane and connect it to Foreach Loop Container.
Double-click the Send Mail Task to specify the appropriate settings, then in the Expressions tab, use the Message variable as the MessageSource Property as below:
The final design surface like below:
References:
Result Sets in the Execute SQL Task
Applies to:
Integration Services 2005
Integration Services 2008
Integration Services 2008 R2
Integration Services 2012
Integration Services 2014
Please click to vote if the post helps you. This can be beneficial to other community members reading the thread.Thanks,
Is this a supported scenario, or does it use unsupported features?
For example, can we call exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', @EventData='b64ce7ec-d598-45cd-bbc2-ea202e0c129d'
in a supported way?
Thanks! Josh -
Missing Return Statement Hell!!
public class EventSite
private int siteNumber;
public EventSite()
siteNumber = 999;
public int getSiteNumber()
return siteNumber;
public Void setSiteNumber(int n)
siteNumber = n;
I'm taking a java class and this won't compile...Whats wrong??
Why the Missing return statement error?flounder wrote:
NewProgramGirl wrote:
no need it is now compiled, think it was the big "V'...thank you....soooo much!!Well that contradicts what you said in reply 4.I'm guessing we forgot the all important "Save" step of the development lifecycle.
Speaking of development lifecycle my version control system at my new job consists of zipping my project to the main fileserver each night before I leave. Apparently the SVN will be set up any day now... -
Missing return statement? News to me!
Before I ask anything let be begin by saying thanks to all you people that help others on these boards, I've never posted a question before but I have often found the answers to my problems somewhere here. I'm currently working on one of my last java assignments ever and I am completely stumped as to whats going on. All I want out of this code is for it to read a txt file for a bunch of phone book entries, load them into some arrays, then sort them by first name, last name, then phone# then return the array so I can use it later on. I've got the entries loaded, I've got em sorted, but I can;t return it. When I try I get a missing return statement error. I dont know why its not returning the array, so I thought I'd ask the pros. I can get it to work fine if I dont return anything but what good is that eh?
Please forgive my terrible coding, I am in no way a real programmer, I just want to pass my classs and never think about it again 8) any help would be appreciated. Tis is built to work with an "Entry" file, if you guys need it to proceed lemme know and I will post it. Thanks.
the code....
public class CSCD210PhoneBook {
public static void main(String[] args)throws IOException
{//Opening main
Scanner kb = new Scanner(System.in);
int entryCount=0;
Scanner fileScanner=null;
Entry[] array=null;
array=populateEntry(entryCount, fileScanner, kb);
}//end main array=
public static Entry[] populateEntry(int entryCount, Scanner fileScanner,Scanner kb)throws IOException
int lineCount=0;
String fileName;
File fileHandle;
System.out.println("Which file would you like your entries pulled from?");
fileName= kb.nextLine();
fileHandle = new File(fileName);
fileScanner = new Scanner(fileHandle);
while(fileScanner.hasNext())
fileScanner.nextLine();
lineCount++;
entryCount= lineCount/8;
Entry[] array=new Entry[entryCount];
fileScanner.close();
fileHandle = new File(fileName);
fileScanner = new Scanner(fileHandle);
for(int i =0; i<array.length;i++)
array=new Entry(fileScanner);
fileScanner.close();
int curPos, indexSmallest, start;
Entry temp;
for (start = 0; start < array.length - 1; start++)
indexSmallest = start;
for (curPos = start + 1; curPos < array.length; curPos++)
if (array[indexSmallest].compareTo(array[curPos]) > 0)
indexSmallest = curPos;
} // end for
temp = array[start];
array[start] = array[indexSmallest];
array[indexSmallest] = temp;
return array;
Any help would be most appreciated.The code you posted has mismatched braces: it needs another } at the end.
Linked with this is how - or rather when - you return array from the populateEntry()
method. You have a couple of nested for-loops and you return array inside (at the
end of) the outer loop.
The compiler is really fussy about making sure that an Entry[] is returned from this
method. If you outer for-loop never gets executed for some reason, then the return
statement will never be reached. The compiler won't accept this.
Either
(1) move the return statement outside both loops so it is always executed. This
appears to be the most logical thing - but I haven't read your code that closely. It's
just that having return at the end of a for-loop (with no "continue" in sight), doesn't
make a lot of sense.
or
(2) add another return after both loops have finished. -
RETURN STATEMENT IN A PROC PROGRAM
HI,
I have written a small program in proc which is supposed to pick
up records from a table matching a certain criteria.The records
will be displayed in the screen one after the other. For every
record displayed there is an option to perform certain
operations such as
(1) authorise the record which will update certain values to
certain fields in the table
(2) skip the record which would display the next record from the
cursor
(3) Reject the record which will delete it from the table and
then fetch the next record from the cursor
(4) quit - which should return control out of the function to
the place where the function was called. This has been done by
way of a return statement.
There are only two ways to come out of the function
(1) one is when the quit option is chosen as explained above
(2) when the control goes past the last record in the cursor
(when 1403 is raised)
However, when the above two conditions are met (for eg I skip
all the records and the reach the end of the cursor) or when i
explicity choose the quit option, the control does not come out
of the function, but keeps calling the function repeatedly .
The only time when it comes out is when the cursor does not
fetch any records.
The program works perfectly fine in a solaris machine (oracle
version 8.1.7). The problem is faced in a DEC ALPHA machine
with an oracle 8.0.6 version.
Has this anything to do with the machine set up, compilation
script etc...or pls suggest what could be the other
possibilities.
Please note that the return statements used in the sub functions
are working properly.
Regards...RajeeIf nothing strange hapens in the try code, the return
statement will be achieved. In this case, what will
hapen ? The code in the finally block will be executed
??Yes. Hence the word "finally". -
Return statement in exception and consequences
Hi,
Can any one give me the explanation for my doubt?
Case 1:
I am having some code throwing some exception lets say arithematic exception in my try block.
I caught it in the catch block and at last I am having one finally?
as per normal order try block next catch block and at last finally will execute.
I execute the above code by putting a return statement inside catch block.I got the same order of execution irrespective of return statement inside catch?
What is the significance of return inside catch?
Case 2:
Lets take the scenario.
class MyException
public static void main(String[] args)
int i=1,j=0;
try
try
System.out.println("the value is: "+(i/j));
System.out.println("Inside try block");
catch(ArithmeticException e)
System.out.println("hi in ame");
//return;
finally
System.out.println("inner finally");
System.out.println("outer try");
catch(Exception e)
e.printStackTrace();
System.out.println("in exception");
finally
System.out.println("plz wait");
If return statement is there inside the inner try and catch the code out of inside outer try not getting executed Why So?
Any clarifications?
Thanking you,
Murthy.First, please format your code as per http://forum.java.sun.com/features.jsp#Formatting
I'm not sure what part you don't understand.
. public static void main(String[] args) {
. try {
. try {
. throw new ArithmeticException();
. System.out.println("Inside try block"); // #1
. catch(ArithmeticException e) {
. System.out.println("hi in ame"); // #2
. return;
. finally {
. System.out.println("inner finally"); // #3
. System.out.println("outer try"); // #4
. catch(Exception e) {
. System.out.println("in exception"); // #5
. finally {
. System.out.println("plz wait"); // #6
. }#1 -- You won't get here because you throw AME.
#2 -- You will get here because you caught the AME you just threw.
#3 -- You will get here because it's a finally
#4 -- You won't get here. I think that this is what you're asking about: Why don't we get here? Because we've already done 'return' and this line is NOT inside a finally. The only things that can get executed after a return are finally blocks.
#5 -- You won't get here because you already caught the AME and didn't rethrow it or any other exception.
#6 -- You will get here because it's a finally.
Once you do a return, the only code you can execute before exiting the method are finally blocks. First the one corresponding to the try/cathc block where your return is, then the finally for the try/catch that encloses that one, and so on outward. The code between one finally and the next (#4 here) is NOT executed.
If you still have a question, please try to clarify exactly what behavior you don't understand.
Don't return from inside t/c/f. -
Method "jumping" return statement
(Sorry for my bad English)
Hi, i have a method that makes comparison between Strings, here it is :
public String comparacion(String cc,String ci,int tlnm,int ndc){
int te = ci.indexOf(' ');
if( te != -1 ){
String[] palabras = ci.split(" ");
int index = palabras.length - 1;
String nombre = "";
int indice = 0;
for( int k = 0; k <= index; k++ ){
for( int lcc = cc.length() - 1,lci = palabras[k].length() - 1 ;
lci >= 0 && lcc >= 0;
lcc--,lci-- ){
char ccc = cc.charAt(lcc);
char cci = palabras[k].charAt(lci);
if( ccc != cci ){
break;
if( "DE".equals(palabras[k]) || "DEL".equals(palabras[k]) ||
"LA".equals(palabras[k]) || "LOS".equals(palabras[k]) ||
"SAN".equals(palabras[k]) ){
indice++;
//System.out.println(index + " " + indice );
break;
if( ccc == cci ){
if( lci == 0 ){
nombre += palabras[k] + " ";
indice++;
//System.out.println("Afuera = " + index + " " + indice + " " + nombre);
if( indice == index ){
System.out.println(index + " " + indice);
return null;
if( tlnm - 1 == ndc ){
//System.out.println(index + " " + indice );
System.out.println("Posible nombre mal escrito en el catalogo : " + ci );
if( te == -1 ){
for( int lcc = cc.length() - 1,lci = ci.length() - 1; lci >= 0 && lcc >= 0; lcc--, lci-- ){
char ccc = cc.charAt(lcc);
char cci = ci.charAt(lci);
if( ccc != cci ){
//Son diferentes
//System.out.println(cci + " es diferente de " + ccc);
//return "Es doble supongo : " + cc ;
break;
if( ccc == cci ){
//System.out.println(cci + " " + ccc);
if( lci == 0 ){
//System.out.println("Son iguales : " + ci + " " + cc);
//return "Son iguales : " + ci + " y " + cc;
return null;
}The problem is in the if that evaluates if indice is equal as index if true and if my understanding of the return statement is right, then it should stop there and return to the
function where it was called from right? Unfortunately this is not happening, in fact i tested with the System.out.println and it enters when the condition is true but it seems
it skips the return and keeps going on the rest of the code. Any idea of what could be the issue ?
-DanielHello Daniel,
IMHO your code has several issues wich make it hard to read and therefore hard to debug:
1. choose better variable names. Variable names should clearly express what they contain or what meaning they have. e.g.: int te = ci.indexOf(' '); // bad
int indexOfSpace = ci.indexOf(' '); // better
// but in your case it really should have been:
boolean isSingleWord = -1 == ci.indexOf(' ');2. you schould never return null unless null is a valid member of the result set (and not some kind of error indikator).
I understand that you plan to have it return something but my impression is that String meight not be the appropriate return type. The other option is that the name of this method is not appropriate.
3. what keep you from using <b>StringTokenizer</b>?
4. why do you iterate over the single characters yourself instead of relying on <b>String.equals()</b>?
5. the line if( te == -1 ) expresses the opposit of the first <b>if</b>, so you should turn it into <b>else</b>.
6. you should extract the bodies of <tt>if( te != -1 )</tt> and <tt>if( te == -1 )</tt> (after turning it to else) to their own methods.
7. the part if( "DE".equals(palabras[k]) || "DEL".equals(palabras[k])
"LA".equals(palabras[k]) || "LOS".equals(palabras[k]) ||
"SAN".equals(palabras[k]) )should better be written this way:private static final List<String> KEYWORD_LIST = Arrays.asList(new String[]{ "DE","DEL","LA", "LOS","SAN"]);
if(KEYWORD_LIST.contains(palabras[k]))8. The keyword check that does not depend on anything declared in the inner loop so it shuld be moved out of it.
9. the check of the input parameters tlnm and ndc do not depent on anything in both of the loops so it should be moved behind (or before) them.
10. if( ccc != cci ){
break;
if( ccc == cci ){
} again this is the opposit so instead of breaking the loop you should have formed a better <b>if</b>.
hope this helps.
bye
TPD -
Waiting for the actions to get executed before submitting it
Hi Guys,
We have a peculiar peoblem wherein we are submitting a report via a job and returning to FM .
In the report we have to execute soame actions on the vehicle being submitted.
The problem is submit is doing its job much before the looping on actions and the status is getting changed with which when it is trying to execute actions its giving an error message sayingh vehicle locked by user/Data has been changed meanwhile.
Its very helpful if anyone providea us a way to submit via job but wait till the report is executed and rerun.
Thanks and Regards,
RajHI Rajashree,
If i have understood your problem properly,
You want to submit a job and return and and want to perform the next few statements only after processing for submitted report is over.
ENQUE_SLEEP is a FM, insert it after submit job..return statement.
you can do that by clicking the pattern button.provide some data for seconds, so it will wait before executing next statement and by the time the submitted report will be processed.
Please give reward point to correct answer and close the thread once you get the correct answer. -
Can we use return statement in procedure?
Can we use return statement in procedure or we can use more than one return statement in procedure?
HamidHelal wrote:
NOReally? Did you at least test it? You can use RETURN in procedure or in anonymous PL/SQL block. The only restriction is you can't specify return value:
SQL> begin
2 dbms_output.put_line('Before return');
3 return;
4 dbms_output.put_line('After return');
5 end;
6 /
Before return
PL/SQL procedure successfully completed.
SQL> create or replace
2 procedure p1
3 is
4 begin
5 dbms_output.put_line('Before return');
6 return;
7 dbms_output.put_line('After return');
8 end;
9 /
Procedure created.
SQL> exec p1;
Before return
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_output.put_line('Before return');
3 return 99;
4 dbms_output.put_line('After return');
5 end;
6 /
return 99;
ERROR at line 3:
ORA-06550: line 3, column 5:
PLS-00372: In a procedure, RETURN statement cannot contain an expression
ORA-06550: line 3, column 5:
PL/SQL: Statement ignored
SQL> create or replace
2 procedure p1
3 is
4 begin
5 dbms_output.put_line('Before return');
6 return 99;
7 dbms_output.put_line('After return');
8 end;
9 /
Warning: Procedure created with compilation errors.
SQL> show err
Errors for PROCEDURE P1:
LINE/COL ERROR
5/9 PL/SQL: Statement ignored
5/9 PLS-00372: In a procedure, RETURN statement cannot contain an
expression
SQL> SY. -
Does an inline view execute before the rest of the select?
Hi,
The O'Reilly book Mastering Oracle Sql defines an inline view simply as a
subquery in a select FROM clause. This conforms to the definitions in
the Oracle 9i and 10g docs.
But unlike the Oracle docs, the O'Reilly book says the inline view is,
like a WITH clause, executed before the rest of the query. I can't see
how this can be done unless the inline view makes no reference to
other tables joined in the FROM clause.
Is there a species of inline view in 9i/10g that IS restricted as above -
no refs to other tables in the FROM clause - and what is it called?
Thanks for any help.
Ken QuiriciAs explained above, Oracle can choose to merge the query if feasible to do so. Look at the two queries and their plans below. The plan in second query changes to creating a temporary VIEW since in that case, Oracle is unable to perform the merge:
SQL> select *
2 from scott.emp e,
3 (select * from scott.dept d where d.deptno = 10) dd
4 where
5 e.deptno = dd.deptno
6 /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7782 CLARK MANAGER 7839 09-JUN-1981 2450 10 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 17-NOV-1981 5000 10 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 23-JAN-1982 1300 10 10 ACCOUNTING NEW YORK
3 rows selected.
Execution Plan
Plan hash value: 3570059291
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 3 | 171 | 2 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 3 | 171 | 2 (0)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 |
|* 3 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 |
| 4 | TABLE ACCESS BY INDEX ROWID| EMP | 3 | 111 | 1 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | IDX_EMP_DEPTNO | 3 | | 0 (0)| 00:00:01 |
SQL> select *
2 from scott.emp e,
3 (select * from scott.dept d where d.deptno = 10 and rownum > 0) dd
4 where
5 e.deptno = dd.deptno
6 /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7782 CLARK MANAGER 7839 09-JUN-1981 2450 10 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 17-NOV-1981 5000 10 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 23-JAN-1982 1300 10 10 ACCOUNTING NEW YORK
3 rows selected.
Execution Plan
Plan hash value: 1670713873
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 5 | 280 | 2 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 5 | 280 | 2 (0)| 00:00:01 |
| 2 | VIEW | | 1 | 19 | 1 (0)| 00:00:01 |
| 3 | COUNT | | | | | |
|* 4 | FILTER | | | | | |
| 5 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 |
|* 6 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 |
| 7 | TABLE ACCESS BY INDEX ROWID | EMP | 5 | 185 | 1 (0)| 00:00:01 |
|* 8 | INDEX RANGE SCAN | IDX_EMP_DEPTNO | 5 | | 0 (0)| 00:00:01 |
SQL> disconnect
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
can it, in it's WHERE clause, reference other tables in the FROM clause?No. it cannot. but as said above, tha may not stop Oracle from merging the queries.
SQL> select *
2 from scott.emp e,
3 (select * from scott.dept d where d.deptno = 10 and e.sal > 1000) dd
4 where
5 e.deptno = dd.deptno
6 /
(select * from scott.dept d where d.deptno = 10 and e.sal > 1000) dd
ERROR at line 3:
ORA-00904: "E"."SAL": invalid identifier
SQL> -
Hi all,
I am using return statement in JSP page after a redirect to stop executing that page. If the data bean is not present then it must go to previous page. When this return statement is executed the previous page is displayed but url in browser remains same. Why it is so ?. Is there any other way to tell a JSP page to stop executing and redirect to another page.
rgds
Antony PaulHi Antony,
do you use the "forward()" method or the "redirect()" method???
rgds
Howy -
Missing return statement question
I got a missing return statement error when i compile in this code but however i dont get any missing return statement errors in the second code that i pasted here.. What is the difference i didn't get it ? Thank you.
public class primechecker {
static double remainder = 0;
public static boolean primecheck(int number){
for(int i=2; i<number; i++){
remainder = number % i;
if (remainder == 0){
return false;
if (remainder !=0){
return true;
public static void main(String[] args) {
System.out.print(primecheck(10));
}That is the second code which gives no error.
public class positiveornegative {
public static boolean numbercheck (int number){
boolean booleann = true;
if(number > 0){
return true;
else if (number < 0){
return false;
else {
return false;
public static void main(String[] args) {
System.out.println(numbercheck(-2));
}In your first snippet, the compiler has no guarantee that the for loop will be executed at all. That leaves only one return inside an if condition which again it has no guarantee that it will ever be reached(the if test may fail). This leads the compiler to the conclusion that your method may never return anything at all. Yet it's definition says that it must return a value.
Maybe you are looking for
-
Okay, that was a long title. Sorry about that. Longer version now. The font Janson Text is an old Type 1 Postscript font. If I make a new document in InDesign CC2014, this font is completely available to me. HOWEVER, if I open a legacy file that uses
-
Hide the center guide in a spread
When viewing a two-page spread, allow the user to hide the center guide (the thin black line that separates the spread). I wrote a question about it here: http://forums.adobe.com/thread/541106?tstart=0 There were some helpful workarounds, but it woul
-
Hi! We have problem when the invoice is being sent from a sub contractor. We are creating a PO in SRM 550 with vendor A. Vendor A gives the vendor B the assignment. Vendor B delivers the material and sends the invoice. When invoice (idoc) arrives it
-
Does anyone know how to use the openURL method to go to a specific search in the App Store? I know how to do it for apps but what if I would like to do it for a developer?
-
Hi guys, I just purchased my first Apple notebook, the Macbook Air 13", last week and needless to say its a wonderful machine. However I've noticed that when I plug in the magsafe2 plug to charge the Air, the text next to battery icon says "Not Charg