Selection statement -"switch-case"
the implicit boolean condition in a switch statement is equality - i.e it tries to match the expression with a value.
My question is this: Is there any other way to implement the Switch statement ?
The old for loops never bothered me, really. The
thing that bugs me most of auto-boxing. combine that
with generics (I never had a major problem with
typeless collections) and I find it annoying.The old for loop never bothered me, either, until I started using the new for loop. Now it makes my fingers tired and Iterator starts to seem like a code smell. Untyped collections always bothered me. Casting is guessing.
and I've already
found a really good use for annotations.admittedly i've never looked into this feature...
what do you use it for?I used them in a SAX parsing tool to map XML elements to Java methods. You write a class with methods like this:
@XmlElementPath("statistics.player.team.name")
public void consumeTeamName(XmlElement teamNameElement) {
}And pass an instance of that class to my document reader. Every XML element with a path that matches the one defined in the annotation will trigger a call to that method. "teamNameElement" contains all of the info about that element.
Before annotations I used to keep that info in a properties file. Annotations removed redundancy by letting me map the method to an element path right in the code.
What don't you like about the direction Java seemsto
be going in?it just seems to have become bloated and
'non-simple'.I think that's inevitable. You can still use it in a simple manner, though. There's nothing mandatory about the extensions.
An anecdotal example is if i go to try and read the
API docs now (for 1.5) i'm constantly distracted by a
myriad of angled brackets, E's, etc. I find it very
hard to find what i'm looking for. So much so that
when I do need to look up something in the API I go
to the 1.4.2 version first (even though I'm using
1.5).Once you get used to them those angle brackets are useful. They look so much like the C++ brackets that it wasn't hard for me to get used to them, I think.
Similar Messages
-
How can write select statement inside case operator
Hi all,
I like to write a query which get result from other table in case operator.
e.g
select a,b,c from dual
where a=1
and b=case when b is null then "select any value from other table" else null end;
Please help me to write this query.
Thankssorry, but thats funny.
You ask for case with subquery and choosed a solution with decode as correct.
Furthermore, the solution proposed might not be so useful.
First of all many people prefer case over decode, because of understandability and readability of the code (toad has this as a coding rule built in too)
Secondly in this case the decode does nothing. Take a closer look:
select a,b,c from tableA a
where a.a = 1
and a.b =(select decode(a.b,null,( select 1 from tableB b where rownum = 1 ),a.b) from dual)the decode chooses the subselect if a.b is null. But if a.b is null the a.b on the left side is null also, so the predicate will never be true.
aside from this, you can write this shorter as
a.b=nvl(a.b,(select 1 from tableB b where rownum = 1))so what will work in such a case might be
ANEXPRESSION(Literal, scalar subquery, ...) =nvl(a.b,(select 1 from tableB b where rownum = 1))otherwise look for a solution with case ;-)
regards
Edited by: chris227 on 12.05.2012 02:12 -
Select statement for summing values in column?
How to write a select statement for sap standard table which contains data as given below
col1 col2
A 10
A 20
A 30
B 50
B 60
C 70
Need the output of select in internal table as given below
A 60
B 110
C 70
Regards,
RachelThanks for all the valuable input.
Below I have used sum in select statement(check case 2"),but i am not getting required o/p.
Kindly guide me.
case1 :
select aebeln aebelp bpackno bmenge
into corresponding fields of table itab
from ( eslh as a inner join esll as b
on bpackno = apackno )
where a~ebeln = 6000000100
and a~ebelp = 00010
and a~packno = '0000001025'
order by aebeln aebelp b~packno .
O/p for the above .
ebeln ebelp packno menge
6000000100 00010 0000001025 6.000
6000000100 00010 0000001025 5.000
6000000100 00010 0000001025 2.000
6000000100 00010 0000001025 1.000
6000000100 00010 0000001025 2.000
case2:
select aebeln aebelp bpackno sum( bmenge )
into corresponding fields of table itab
from ( eslh as a inner join esll as b
on bpackno = apackno )
where a~ebeln = 6000000100
and a~ebelp = 00010
and a~packno = '0000001025'
group by aebeln aebelp b~packno
order by aebeln aebelp b~packno .
6000000100 00010 0000001025 0.000
Edited by: Rachel on Nov 25, 2008 11:45 AM
Edited by: Rachel on Nov 25, 2008 11:46 AM -
Case or decode in select statement for comparison
Hi,
How can I do a comparison
like
if sal < 50, output 1.1 * comm
if sal > 50 and < = 100 output 1.2 * comm
else output comm
in a single select statement.
I tried using case and decode but I am not sure how to use it in comparison operations.
Please helpuse the 'case' construct:
SELECT
NORMAL_FIELD
, (CASE
WHEN (SAL < 50) THEN 1.1 * COMM
WHEN (SAL > 50) AND (SAL <= 100) THEN 1.2 * COMM
ELSE COMM
END
) AS CALCULATED_COMM
FROM
TB_xxxx
WHERE xxxx
hope this helps -
Use of Case in Select statement
Hi All,
Can anyone tell me whats wrong im doing in the following select statement. I am selecting most this fields from Global Temperory Table and few from normal DB tables.
select h.Taskid,h.Flowid,fd.DESCRIPTION Flowname,h.Stepid, sd.DESCRIPTION Stepname,h.Lockby,ud.USERNAME,h.Status,case Date_initiated when (Currval.Testid = Nextval.Testid) Then Date_initiated := NULL Else Date_initiated := Date_initiated End case,case UserTime When ((Currval-1).Testid IS NULL or Currval.Testid <> (Currval-1).Testid) Then UserTime := StartTime When (Currval.Testid = (Currval-1).Testid or Currval.Testid <> Nextval.Testid or Nextval.Testid IS NULL) Then UserTime = (Currval-1).Endtime End case,case StartTime When(Currval.Stepid = Nextval.Stepid or Currval.Stepid=9999) Then StartTime := NULL Else StartTime := StartTime End case,h.EndTime,h.LockTime,h.Drawer,h.FileNo,h.DocType from GlobalTempTest h inner join USERDEFINITION ud on h.Lockby=ud.USERID inner join FLOWDEFINITION fd on h.Flowid=fd.FLOWID inner join STEPDEFINITION sd on (h.Stepid=sd.STEPID and h.Flowid=sd.FLOWID)
Hope so get some response soon.
Thanks in AdvanceYou have to rewrite your code like this:
CASE WHEN (Currval.Testid = Nextval.Testid) THEN NULL
ELSE Date_initiated
END New_Date_initiatedCurrval/Nextval as shown in your example will not work. Please explain what you mean by previous value comparison.
C. -
Case sensitive statement in the select-statement
Hi All,
i have a table in the abap-dictionary filled with names...when i try to select them with the select-statement with condition:
table-name_column like 'some_name'
I have encountered some problems...the inquiry is case-sensitive. What i want to do is to read the value from the abap-dictionary table uppercase or lowercase and compare it with the needed value also translated in uppercase or lowercase.
The only idea i have is to select all values of the dictionary table into an internal table and to translate the values there in uppercase or lowercase and then to loop trough it. But this approach would cost a lot of performance.
Do someone has an other proposal?check...
Select statement
It would be difficult , because it is based on how data is stored in the data base , now consider the scenario of the system i am using , we can material description as 'test' or 'TEST' , 'Test' .
If in your system there are only stored in either caps or small the you can perform the select twice .
But i myself dont find it to be such a good solution , but you can give it a try
There is one more solution specific to material description ,and that is in the table MAKT there is a field MAKTG , which stored the description in uppercase , so for this you can first convert the description to uppercase and then perform select on this field -
Problems with a result in a switch/case control statement
I am having troubles with a switch/case statement in which I am trying to get a result returned from different operators. The problem is that the result always returns 0 no matter what I put in the driver class.
The class where the result needs to be returned looks like this:
public class Calculator
private int num1;
private int num2;
private char operator;
private int result;
public Calculator(int num1, char operator, int num2)
this.num1 = num1;
this.operator = operator;
this.num2 = num2;
} // end constructor
public int getNum1()
return num1;
public char getOperator()
return operator;
public int getNum2()
return num2;
public int getResult()
return result;
public int calculate()
switch(operator)
case '+':
int result = num1 + num2;
break;
} // end case '+'
case '-':
int result = num1 - num2;
break;
} // end case '-'
case '*':
int result = num1 * num2;
break;
} // end case '*'
case '/':
int result = num1 / num2;
break;
} // end case '/'
case '%':
int result = num1 % num2;
break;
} // end case '%'
} // end switch
return result;
public String toString()
String message = (num1) + " " + (operator)
+ " " + (num2) + " " + "=" + " " + result + "\n";
return message;
} // end class
The driver class looks like this:
import javax.swing.JOptionPane;
import java.lang.StringBuffer;
public class CalculatorApp
public static void main (String[] args) // begin main
String choice = "";
while (!(choice.equalsIgnoreCase("x"))) // begin while loop
String number1 = JOptionPane.showInputDialog(
"Enter a positive integer: ");
String operatorInput = JOptionPane.showInputDialog(
"Enter operator (+, -, *, /, %): ");
String number2 = JOptionPane.showInputDialog(
"Enter another positive integer: ");
int num1;
char operator;
int num2;
num1 = Integer.parseInt(number1);
operator = operatorInput.charAt(0);
num2 = Integer.parseInt(number2);
Calculator calculator = new Calculator(num1, operator, num2);
String message = calculator.toString() + "\n"
+ "Press Enter to conitnue or 'x' to exit.";
choice = JOptionPane.showInputDialog(message);
} // end while loop
System.exit(0);
} // end main
any help would be wonderful! I don't know why the result returned is always 0 but it is. Thanks!
dragwitThe previous poster is correct. You never call the calculate method. If you don't call it, no one's going to call if for you. This stuff doesn't work by magic. I think you've misunderstood your prof's intent in this regard.
However, it still won't work with the changes previously suggested, because declaring an int result in the calculate method will hide the instance field of the same name, which is what your getResult() method retrieves. Don't delare result at all in your calculate method.
That said, it would be architecturally a lot better if the calculate method returned the result rather than storing it back into the instance. -
Hello,
in Oracle8 I've the following problem:
The statement
SELECT ''' | ''||' || 'rpad'
|| '(''' || column_name
|| ''',' ||
(CASE WHEN (data_type = 'VARCHAR2' AND
data_length > 50) THEN
to_number('50')
WHEN (data_type = 'CHAR' AND
data_length > 50) THEN
to_number('50')
WHEN (data_type = 'CLOB' AND
data_length > 50) THEN
to_number('50')
WHEN (data_type = 'DATE' AND
data_length != 19) THEN
to_number('19')
ELSE
data_length
END )
|| ', '' '')||' AS column_name
FROM dba_tab_columns
WHERE
table_name = upper('DBA_TABLES') AND
owner = upper('SYS')
ORDER BY column_id;
works fine but defining the same statement as a cursor in a PL/SQL Procedure, I got a
Error: PLS-00103: Encountered the symbol "CASE" when expecting one of the following:
( - + mod not null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string>
The same procedure can be compiled in Oracle9i without errors.
Does anybody know if there are any restrictions using CASE statements in a PL/SQL CURSOR in Oracle8?
Thanks
PatricHi,
I am encountering the same problem.
Can u suggest the decode statement used instead of case
for this select clause which uses the CASE statement ?
SELECT
CASE
WHEN S.cmpy_num = S.cpty_borg_num THEN
''OURS''
ELSE
''THEIRS''
END AS SDIOwner,
From TABLE -
Case in Select Statement - Ramya
Hi All,
Could any body help me out ,how to use the CASE in select Statement
Thanks in Advancehere is an example:
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7566 JONES MANAGER 7839 02-APR-81 2975 1000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
14 rows selected.
SQL> select empno,
2 ename,
3 job,
4 case when job = 'PRESIDENT' then 1
5 when job = 'MANAGER' then 2
6 when job = 'SUPERVISOR' then 3
7 else 4
8 end rank
9 from emp;
EMPNO ENAME JOB RANK
7566 JONES MANAGER 2
7902 FORD ANALYST 4
7839 KING PRESIDENT 1
7698 BLAKE MANAGER 2
7782 CLARK MANAGER 2
7369 SMITH CLERK 4
7499 ALLEN SALESMAN 4
7521 WARD SALESMAN 4
7654 MARTIN SALESMAN 4
7788 SCOTT ANALYST 4
7844 TURNER SALESMAN 4
7876 ADAMS CLERK 4
7900 JAMES CLERK 4
7934 MILLER CLERK 4
14 rows selected.
SQL> -
Why we use Tables statement in case of using SELECT-OPTIONS:
hi all,
Why we use Tables statement in case of using the following coding in an ABAP program ...
tables: vbak.
SELECT-OPTIONS: s1 for vbak-vbeln.
here if we dont provide the tables statement why it does not work ????
pls answwer ....???Hi
This statement is not allowed in classes and declares a data object table_wa as a table work area whose data type is adopted from the identically named structured data type table_wa from the ABAP Dictionary. table_wa must be defined as a flat structure in the ABAP Dictionary. You can specify database tables or Views for table_wa.
Work table areas declared with TABLES are interface work areas and should only be declared in the global declaration section of a program for the following purpose:
reward if usefull
The statement TABLES is required for exchanging data between screen fields that were defined in a program screen when transferring from the ABAP Dictionary and the ABAP program. For the screen event PBO, the content of the table work area is transferred to identically named screen fields; for PAI, the system adopts the data from identically named screen fields.
In executable programs, flat table work areas can be used for adopting data that were provided for the event GET table_wa from a linked logical database. TABLES is synonymous with the statement NODES for this purpose.
Work table areas declared with TABLES behave like the data declared with the addition COMMON PART, meaning the data are used by the programs of a program group.
Table work areas declared with TABLES can be declared in subroutines and
function modules. However, this is not recommended. A table work area declared in a procedure is not local but belongs to the context of a framework program. The table work area can be viewed starting from the declaration in the framework program and lives as long as the framework program. In contrast to normal program-global data, the content of the table work areas declared in subroutines and function modules is stored temporarily when these subroutines and function modules are called. Value assignments that were made during runtime of the procedure are preserved until the procedure is completed. When exiting the procedure, the table work areas are filled with the contents that they contained when the procedure was called. Table work areas declared in procedures behave like global data to which the statement LOCAL is applied in the procedure.
The form TABLES * is obsolete. -
Break statement not working in switch case
Hi,
I've run into this problem multiple times and have looked up the syntax for a switch statement. The problem with the code below is that when it goes into the first case, it executes the break statement but still executes the next case instead of breaking out of the switch case. Can anyone see whats going wrong?
try
switch (columnProps.getCellType())
case (ExcelConstants.CELL_TYPE_STRING):
excelCell.setCellValue(iterator.getCurrentColumnStringValue());
break;
case (ExcelConstants.CELL_TYPE_NUMERIC):
excelCell.setCellValue(iterator.getCurrentColumnIntValue());
break;
catch (Exception e)
System.out.println(e.toString()):
it executes the break statement but
still executes the next case instead of breaking out
of the switch case. Can anyone see whats going wrong?You can if you put in traces (print statements) in proper places. This will allow you to exactly follow the switch behaviour. -
Help with Switch-Case Statement
How do you get this in a switch-case statement or work with it?
if (age < 70) {
JOptionPane.showMessageDialog(null, "People that are below the 70s are nothing special.");
else if (age > 69 && age < 80) {
JOptionPane.showMessageDialog(null, "People that are in their 70s are called septuagenarian.");
else if (age > 79 && age < 90) {
JOptionPane.showMessageDialog(null, "People that are in their 80s are called octogenarian.");
else if (age > 89 && age < 100) {
JOptionPane.showMessageDialog(null, "People that are in their 90s are called nonagenarian.");
else (age > 99 && age < 110) {
JOptionPane.showMessageDialog(null, "People that are in their 100s are called centenarian.");
}Thanks~As per Java Specification, swtich case expects an integer and boolean cannot be used as param for switch.
In your case switch can be used like this.
int index = age /10;
switch(index) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
Your First case
break;
case 7:
your second case
break;
case 8:
third case
break;
case 9:
fourth case
break;
default:
fifth case
break;
Take note of the break statements. Its very important. But I wont prefer in this case. Code looks awkward and is not so meaningful..... -
DoGet method is called 2 times when a switch-case statement is used
Hello all,
I have a servlet that, when run from browser, runs the doGet method 2 times.
I have a switch case statement within the servlet and when I comment out this servlet, it runs 1 time as expected.
Here is the code:
public class RSSServlet extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("CALLED SERVLET");
response.setContentType("text/xml;charset=UTF-8");
PrintWriter out = response.getWriter();
DBQueriesRSS queries = new DBQueriesRSS();
String queryType = request.getParameter("queryType");
String strCount = request.getParameter("count");
int count = (strCount != null && !strCount.equalsIgnoreCase("null") && strCount.length() > 0) ?
Integer.parseInt(strCount) : 25;
if(queryType != null && !queryType.equalsIgnoreCase("null") && queryType.length() > 0) {
System.out.println("IN IF STATEMENT");
switch(Integer.parseInt(queryType)) {
case 1 : out.println(queries.getDefault(count));System.out.println("1"); break;
case 11: out.println(queries.getDefault(count));System.out.println("11"); break;
case 21: out.println(queries.getTopDaily(count));System.out.println("21"); break;
case 22: out.println(queries.getTopWeekly(count));System.out.println("22"); break;
case 23: out.println(queries.getTopMonthly(count));System.out.println("23"); break;
case 24: out.println(queries.getTopYearly(count));System.out.println("24"); break;
case 31: out.println(queries.getTopNDailyBW(count));System.out.println("31"); break;
case 32: out.println(queries.getTopNWeeklyBW(count));System.out.println("32"); break;
case 33: out.println(queries.getTopNMonthlyBW(count));System.out.println("33"); break;
case 34: out.println(queries.getTopNYearlyBW(count));System.out.println("34"); break;
default: out.println(queries.getTopWeekly(25));System.out.println("default"); break;
System.out.println("OUT OF SWITCH");
System.out.println("OUT OF IF");
out.close();
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
/** Returns a short description of the servlet.
public String getServletInfo() {
return "Short description";
// </editor-fold>
} The results from running this servlet are:
http://localhost/proxy/RSSServlet??queryType=34&count=66
CALLED SERVLET
IN IF STATEMENT
34
OUT OF SWITCH
OUT OF IF
CALLED SERVLET
IN IF STATEMENT
34
OUT OF SWITCH
OUT OF IFAnyone see anything obvious?
TIA!in your case you want 'count' to be a class attribute rather than a local variable. But yes, incrementing it each time that the method is called will serve your purpose.
-
Case sensitve in selection statement
Hi All
I like to write a select statement which is able to get the values irrespective of case sesitive
ie
select * from table_name where column_name like('%sun%')
selection of columns should happen even the column name is '%SUN%' or '%Sun%' ie '%sun%' should not be case sensitive....Can anyone suggest me query for this
Note: the query needs to work in oracel server. Also changing the session ie alter session set NLS_SORT=BINARY_CI ;
alter session set NLS_COMP=LINGUISTIC; cannot be done.
So please help me to get the selection purely through query
With thanks and regards
AnoopUse LOWER or UPPER,
so, for example:
lower(column_name) like '%sun%'
-- OR
upper(column_name) like '%SUN%' -
How to use case to replace the & in select statement
Oracle version : 11.1.0.6.0
RHEL
Hi,
I want to get a list of all expired and locked users but want to replace the "&" with and here is my code but it isn't working.
Please some guidance, thanks.
SQL> select username,
2 case (account_status like 'EXP%' then 'EXPIRED AND LOCKED'
3 ELS 'no locked users'
4 end) account_status
5 from dba_users
6 where account_status like 'EXPI%';
case (account_status like 'EXP%' then 'EXPIRED AND LOCKED'
ERROR at line 2:
ORA-00907: missing right parenthesis798188 wrote:
thanks for the comments I corrected the ELSE and 'EPX%' but still same error :
EOH> select username,
2 case (account_status like 'EXP%' then 'EXPIRED AND LOCKED'
3 ELSE 'no locked users'
4 end) account_status
5 from dba_users
6 where account_status like 'EXP%';
case (account_status like 'EXP%' then 'EXPIRED AND LOCKED'
ERROR at line 2:
ORA-00907: missing right parenthesisFirst of all, you do not need a CASE statement.
Did you see the where clause of your query??
6 where account_status like 'EXP%';do you realise that your query will always return those records for which value of account_status column starts with 'EXP'?
Why use CASE when it could be simply written like this :
SELECT username,
'EXPIRED AND LOCKED'
FROM dba_users
WHERE account_status LIKE 'EXP%'
Maybe you are looking for
-
How do i get MVI files to play in imovie?
i keep trying to get a video file to play, but it just shows up grey (unclickable) when i go to import it. could it have to do with the fact that its an MVI file? and, if so, how can i change it so it'll play?
-
How to put PDF in my i-Pod Nano?
I know I can't put stright PDF in my my i-Pod Nano and I would like to know how turn a PDF file into a picture or text file so I would be able to put it in there. please answer me if you can, daniel
-
My ipod is COMPLETELY SCREWED after using camera connector
g'day After using the camera connector with my 30GB ipod, i can't do anything with it any more. when i select a song it doesn't play, it just skips through to the next and the next and the next... and i can't view any photos nor videos. ie my ipod is
-
I have forgotten my security quation answer i have 35 CHF HOW CAN I REORGANIZE THIS PROBLEM
hi how i reorganize my apple ID security quesion i have forgotten it
-
I have createsd a connection in the 9.3 IDE. How do I access this from an application using the datasource methods? The connection works fine when used to create table beans via the wizard. Thanks Leo Martin.