Nested EL expression
hi :)
can anybody tell me why this doesn't work well :
<s:link value="#{messages['add']}" action="#{ugmanager.addrole(#{r.id})}" />
i want inject inject into function addrole value of r.id but i inject #{r.id}
ps.
'#{ugmanager.addrole("#{r.id})"}'
"#{ugmanager.addrole(r.id)}"
also dosn't work
Message was edited by:
t.maciek
Use parameters instead. See BalusC's web page:
http://balusc.xs4all.nl/srv/dev-jep-com.html
CowKing
Similar Messages
-
Nested CASE expressions in SQL Server 2008 R2
Hi, For some reason when I use the below CASE expression in my SELECT statement I get duplicate records.
CASE WHEN <Condition 1> THEN <Expression 1>
WHEN <Condition 2> THEN <Expression 2>
WHEN <Condition 3> THEN <Expression 3>
WHEN <Condition 4> THEN <Expression 4>
END AS CaseResult
Also tried using coalesce with no luck. How to write a nested CASE expression which would yield just one expression. In case if I have to combine 2 different Expressions for 1 record, Is there a way to merge the 2 Expressions writing CASE
expression something like below.
STUFF ((SELECT ',' + CASE WHEN <Condition 1> THEN <Expression 1>
WHEN <Condition 2> THEN <Expression 2>
WHEN <Condition 3> THEN <Expression 3>
WHEN <Condition 4> THEN <Expression 4>
END
FOR XML PATH(''), ROOT('MyString'), TYPE).value('/MyString[1]','VARCHAR(MAX)'), 1, 1,'') AS CaseResult
--ResultSet
CaseResult
<Expression 1, Expression 2>
I am using SQL Server 2008 R2. Thanks in advance.......
IoneHi, For some reason when I use the below CASE expression in my SELECT statement I get duplicate records. Also tried using coalesce with no luck. How to write a nested CASE expression which would yeild just one expression. In case if I have to combine 2 different
Expressions for 1 record, Is there a way to merge the 2 Expressions writing CASE expression something like below in SQL Server 2008 R2.
CASE WHEN <Condition 1> THEN <Expression 1>
WHEN <Condition 2> THEN <Expression 2>
WHEN <Condition 3> THEN <Expression 3>
WHEN <Condition 4> THEN <Expression 4>
END AS CaseResultSTUFF ((SELECT ',' + CASE WHEN <Condition 1> THEN <Expression 1>
WHEN <Condition 2> THEN <Expression 2>
WHEN <Condition 3> THEN <Expression 3>
WHEN <Condition 4> THEN <Expression 4>
END
FOR XML PATH(''), ROOT('MyString'), TYPE).value('/MyString[1]'<span clas
Ione -
Nesting EL expressions in core tags
Hi all,
I have a situation where I require to use dymanic textboxes based on the certain criteria. To make this work I used strut's LazyValidatorActionForm. It works like a charm but when I want to write out certain form property using EL, it doesn't work well. I am not sure how to use it with <c:out />. For example:
This is the code I tried to display a link with a value in the dynamic form:
<c:forEach var="counter" begin="0" end="${numTextFields}" >
?methodToCall=removeElement&id=<c:out value="${request['FAEditorForm'].id_${counter}}" />">Remove</a>
</c:forEach>
Here, I am trying to get the Form from the request attribute and invoke the method for property 'id_?' where '?' can be some number depending on the counter in the loop. When executing this page, I am getting an exception:
javax.servlet.jsp.JspException: Can't insert page '/pages/findingaids/FACustomContainerEditor.jsp' : javax.servlet.jsp.JspException: The taglib validator rejected the page: "tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${request['FAEditorForm'].id_${counter}}": Encountered "{", expected one of ["}", ".", ">", "gt", "<", "lt", "==", "eq", "<=", "le", ">=", "ge", "!=", "ne", "[", "+", "-", "*", "/", "div", "%", "mod", "and", "&&", "or", "||"], "
I also tried using <c:set /> but looks like the JSTL tags does not allow nesting EL ('{') inside another EL. Not sure how to solve this issue. Any help is appreciated.
Thanks,
SriniTo solve the nested EL expression issue, you use the square brackets notation.
This should be close to what you want.
<c:forEach var="counter" begin="0" end="${numTextFields}" >
<c:set var="cVar" value="id_${counter}"/>
<c:out value="${FAEditorForm[cVar]"/>
</c:forEach>However instead of building the parameter string manually, you should let the struts tag do it for you.
Seeing as you have two parameters, you have to pass it a map.
<jsp:useBean id="paramMap" class="java.util.HashMap" scope="page"/>
<c:set target="${paramMap}" property="methodToCall" value="removeElement"/>
<c:forEach var="counter" begin="0" end="${numTextFields}" >
<c:set var="cVar" value="id_${counter}"/>
<c:set target="${paramMap}" property="id" value="${cVar}"/>
<html:link page="/FAEditor.do" name="paramMap">Remove </html:link>
<br>...
</c:forEach>Cheers,
evnafets -
Using nested IIF expressions in an update query - is it possible?
Hi everyone,
I've been tasked by my manager to build a database which replicates a large, complicated Excel spreadsheet that consumes too much of our team's time and system resources. I've just about got most of it, but there is one particular required field that, in
Excel, requires multi-layered nested If/Then formulae. I have to ask if building something similar in Access is possible. Here is the problem and the logic:
Let us assume two established fields, Field 1 and Field 2; and then one field to be created via Update query, Field 3.
Let us further assume that in Fields 1 and 2, there are three specific alphanumeric sequences occurring (“X1A”, “X1”, and “Z1”) that need to be identified and then called out as either “S1” or “U1” in field 3.
If an Update Query were to be written to populate Field 3 with either “S1” or “U1” depending on one of the three alphanumeric sequences appearing in either Field 1 or Field 2, could it be written as the following expression, using the IIF and OR operators?
And if so, is the syntax of the following expression correct?
IIf([FIELD 1]="* X1A", "U1", OR IIf([FIELD 2]="* X1", "U1", OR IIf([FIELD 2]="* Z1", "U1", OR IIf([FIELD 1]="* X1", "U1", OR IIf([FIELD 1]="* Z1", "U1", "S1")))))
Any help, critiques, or guidance would be appreciated.IMHO, a main consideration when "migrating" from Excel to Access is that a relational database is fundamentally different from a spreadsheet (although there can be much overlap). In Excel, calculated values are "live" (unless you paste the values only
into some other cells). To replicate this "live" quality in Access, you can use a query with a calculation to display (not create or update) Field 3 in your case; Field 3 really wouldn't be a field, just a representation (query, form, report) or snapshot
(export, print). One reason for this is to avoid conflicts and redundancy. In other words, if Field 3 is based solely on Fields 1 & 2 and some rule, then usually there is no need to waste disk space to store Field 3 and you don't risk Field
3 being wrong as in the case when the rule changes.
So here are a couple of options.
1) Create view only query to display Field 3. In query design view, enter the following where you would normally select a field:
[FIELD 3]: IIf([FIELD 1]="* X1A", "U1", IIf([FIELD 2]="* X1", "U1", IIf([FIELD 2]="* Z1", "U1", IIf([FIELD 1]="* X1", "U1", IIf([FIELD 1]="* Z1", "U1", "S1")))))
I assume you literally mean the asterisk character and are not trying to invoke a wildcard for the LIKE operator.
There are other ways of doing this (e.g. with the LIKE operator or multiple queries and UNION), but I leave that up to you to explore.
2) Actually update the value of FIELD 3 in a table. Create two update queries and use your rules as conditions (i.e. the criteria in the bottom of query design).
a) Update query 1 (run first): set [FIELD 3] = "U1" where [FIELD 1] = "* X1A" OR [FIELD 1] = "* X1" OR [FIELD 1] = "* Z1" OR [FIELD 2] = "* X1" OR [FIELD 2] = "* Z1"
b) Update query 2 (run after): set [FIELD 3] = "S1" where [FIELD 3] is null
Again, there are other ways of doing this such as setting the default value of [FIELD 3] in the table to "S1" and just running update query 1.
Good luck. -
How many levels can i nest my CASE expression in a Update or any DML statement?
Hi,
Columns can have aliases; expressions that are just part of computing a column can't have aliases.
If you could assign an alias, Oracle doesn't provide any way to reference it.
If you need to reference an expression, make it a separate column, perhaps in a sub-query. -
Hello,
I am using jsp to read an xml file, then build a table from the contents. My xml looks like this:
<document>
<first> Text of First tag
<second> Text of second tag
<inner> Text of inner tag</inner>
<inner> Text of inner tag</inner>
</second>
</first>
<first> Text of First tag
<second> Text of second tag
<inner> Text of inner tag</inner>
<inner> Text of inner tag</inner>
</second>
</first>
</document>I am using the standard tag library to iterate over the nodes of type <first>. My problem is that when I get to each <first> node, I want to iterate over each <inner> node, but I don't know how to reference them with XPath. Here is a snippet of my jsp:
<c:import var="xml" url="test2.xml"/>
<x:parse varDom="dom" xml="${xml}"/>
<x:forEach var="First" select="$dom/document/first"> // iterates over each <first> tage
<x:set var="Second" select="string($First/second)" /> // only one second tag per first tag
<x:forEach var="inner" select="$Second/inner" > // now I want to loop over all the <inner> tags
// process inner tags here
</x:forEach>
</x:forEach>I can't figure out how to access the inner tags with xpath. I can access the "Second" variable, but when I try to go into the second loop, I can't get the text of the <inner> tag. Any suggestions?Good question. I looked at the documentation for the x:forEach element, and it says that it sets the context node to each element of the iteration. So, inside your x:forEach element you can assume that the context node is a first element from your document. The XPath expression to find your inner elements relative to that context node is "inner/second". So:<x:forEach var="inner" select="second/inner" >
-
Nested conditional Expression language in ADF
I am trying to get a nested conditional operator to work in my inlinestyle field and It doesnt seem to work. can someone show me what is being done wrongly.
inlineStyle="#{row.bindings.Slot1.inputValue == "0" ? (row.bindings.Slot1.inputValue == "1" ? 'background-color:Yellow;' : 'background-color:White;' ) : 'background-color:Gray;' }"
Thanks,
RASTimo,
I tried with or inbetween each check and setting the color accordingly and it didnt work either and I was playing around with conditional statement to see if that might help. Do you ahve any suggestions on how to set a back ground color based off of the input value in El and I need to set three different colors based on 0,1 and 2 as input values. Your help here is appreciated!
Thanks,
RAS -
How to implement "if/then/else" or "case" logic in a Statement Expression?
I need a loop in my test sequence, so I define a Locals.LoopIndex which is of type Number, and I also define a Locals.PromptMessage, which is of type String. Within the loop body, have a statement step, in which I want to assign Locals.PromptMessage different strings according to the value of Locals.LoopIndex. The logic is like this (in suedo code)
case Locals.LoopIndex:
1: Locals.PromptMessage = "string1";
break;
2: Locals.PromptMessage = "string2";
break;
or
if (Locals.LoopIndex == 1)
then Locals.PromptMessage = "string1";
else if (Locals.LoopIndex == 2)
then Locals.PromptMessage = "string2";
How can I implement this in the Statement Expression?
Thanks!You can use the conditional expression (not sure what it is called). Syntax is Locals.variable=(BooleanExpression?ValueIfTrue:ValueIfFalse). To implement your pseudo code it would look like this:
Locals.PromptMessage=(Locals.LoopIndex==1?"string1":"string2")
This means the same as:
If Locals.LoopIndex=1 then
Locals.PromptMessage = "string1"
Else
Locals.PromptMessage = "string2"
End If
Another way to do it is like this, but the first method is preferred:
Locals.LoopIndex==1?(Locals.PromptMessage="string1")Locals.PromptMessage="string2") -- must use parenthesis as shown
This syntax is BooleanExpression?(Statement if BooleanExpression is true)Statement if BooleanExpression is false)
You can nest the expression to create ElseIf conditions:
Locals.PromptMessage=(Locals.LoopIndex==1?"string1"Locals.LoopIndex==2?"string2":"string3"))
This means the same as:
If Locals.LoopIndex=1 then
Locals.PromptMessage = "string1"
ElseIf Locals.LoopIndex=2 then
Locals.PromptMessage = "string2"
Else
Locals.PromptMessage = "string3"
End If
I don't know if there is a limit to the nesting.
Hope this helps.
- tbob
Inventor of the WORM Global -
CASE STATEMENTS AND CASE EXPRESSIONS IN ORACLE9I PL/SQL
제품 : PL/SQL
작성날짜 : 2001-11-13
CASE STATEMENTS AND CASE EXPRESSIONS IN ORACLE9I PL/SQL
=======================================================
PURPOSE
아래의 자료는 Case 문에서 oracle 8.1.7과 Oracle 9i의 New Feature로 8.1.7에서는
sqlplus 에서만 가능했고, 9i 부터는 pl/sql 까지 가능하다.
Explanation
1. Oracle 8.1.7 Feature
Oracle 8.1.7 에서 Case 문은 Decode 문과 유사하지만, 기존의 decode 문을 쓰는 것보다
더 많은 확장성과 Logical Power와 좋은 성능을 제공한다. 주로 나이와 같이 category 별로
나눌때 주로 사용하고 Syntex는 아래와 같다.
CASE WHEN <cond1> THEN <v1> WHEN <cond2> THEN <v2> ... [ELSE <vn+1> ] END
각각의 WHEN...THEN 절의 argument 는 255 까지 가능하고 이 Limit를 해결하려면
Oracle 8i Reference를 참조하면 된다.
The maximum number of arguments in a CASE expression is 255, and each
WHEN ... THEN pair counts as two arguments. To avoid exceeding the limit of 128 choices,
you can nest CASE expressions. That is expr1 can itself be a CASE expression.
Case Example : 한 회사의 모든 종업원의 평균 봉급을 계산하는데 봉급이 $2000보다 작은경우
2000으로 계산을 하는 방법이 pl/sql을 대신하여 case function을 사용할 수 있다.
SELECT AVG(CASE when e.sal > 2000 THEN e.sal ELSE 2000 end) FROM emp e;
Case Example : 나이를 column으로 가지고 있는 customer table을 예로 들어보자.
SQL> SELECT
2 SUM(CASE WHEN age BETWEEN 70 AND 79 THEN 1 ELSE 0 END) as "70-79",
3 SUM(CASE WHEN age BETWEEN 80 AND 89 THEN 1 ELSE 0 END) as "80-89",
4 SUM(CASE WHEN age BETWEEN 90 AND 99 THEN 1 ELSE 0 END) as "90-99",
5 SUM(CASE WHEN age > 99 THEN 1 ELSE 0 END) as "100+"
6 FROM customer;
70-79 80-89 90-99 100+
4 2 3 1
1 SELECT
2 (CASE WHEN age BETWEEN 70 AND 79 THEN '70-79'
3 WHEN age BETWEEN 80 and 89 THEN '80-89'
4 WHEN age BETWEEN 90 and 99 THEN '90-99'
5 WHEN age > 99 THEN '100+' END) as age_group,
6 COUNT(*) as age_count
7 FROM customer
8 GROUP BY
9 (CASE WHEN age BETWEEN 70 AND 79 THEN '70-79'
10 WHEN age BETWEEN 80 and 89 THEN '80-89'
11 WHEN age BETWEEN 90 and 99 THEN '90-99'
12* WHEN age > 99 THEN '100+' END)
SQL> /
AGE_G AGE_COUNT
100+ 1
70-79 4
80-89 2
90-99 3
Example
2. Oracle 9i Feature
Oracle 9i부터는 pl/sql에서도 case문을 사용할 수 있으면 이것은
복잡한 if-else 구문을 없애고, C언어의 switch문과 같은 기능을 한다.
아래의 9i pl/sql Sample 및 제약 사항을 보면 아래와 같다.
Sample 1:
A simple example demonstrating the proper syntax for a case
statement
using a character variable as the selector. See the section entitled
'Restrictions' at the end of this article for details on which PLSQL
datatypes may appear as a selector in a case statement or
expression.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
begin
case achar
when 'A' then dbms_output.put_line('The description was Excellent');
when 'B' then dbms_output.put_line('The description was Very Good');
when 'C' then dbms_output.put_line('The description was Good');
when 'D' then dbms_output.put_line('The description was Fair');
when 'F' then dbms_output.put_line('The description was Poor');
else dbms_output.put_line('The description was No such Grade');
end case;
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 2:
A simple example demonstrating the proper syntax for a case
expression
using a character variable as the selector. See the section entitled
'Restrictions' at the end of this article for details on which PLSQL
datatypes may appear as a selector in a case statement or
expression.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
description varchar2(20);
begin
description :=
case achar
when 'A' then 'Excellent'
when 'B' then 'Very Good'
when 'C' then 'Good'
when 'D' then 'Fair'
when 'F' then 'Poor'
else 'No such grade'
end;
dbms_output.put_line('The description was ' || description);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
NOTE: The above simple samples demonstrate two subtle differences in the
syntax
required for case statements and expressions.
1) A case STATEMENT is terminated using the 'end case' keywords; a
case
EXPRESSION is terminated using only the 'end' keyword.
2) Each item in a case STATEMENT consists of one or more
statements, each
terminated by a semicolon. Each item in a case expression
consists of
exactly one expression, not terminated by a semicolon.
Sample 3:
Sample 1 demonstrates a simple case statement in which the selector
is
compared for equality with each item in the case statement body.
PL/SQL
also provides a 'searched' case statement as an alternative; rather
than
providing a selector and a list of values, each item in the body of
the
case statement provides its own predicate. This predicate can be any
valid boolean expression, but only one case will be selected.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
begin
case
when achar = 'A' then dbms_output.put_line('The description was
Excellent');
when achar = 'B' then dbms_output.put_line('The description was Very
Good');
when achar = 'C' then dbms_output.put_line('The description was
Good');
when achar = 'D' then dbms_output.put_line('The description was
Fair');
when achar = 'F' then dbms_output.put_line('The description was
Poor');
else dbms_output.put_line('The description was No such Grade');
end case;
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 4:
This sample demonstrates the proper syntax for a case expression of
the
type discussed in Sample 3 above.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
achar char(1) := '&achar';
description varchar2(20);
begin
description :=
case
when achar = 'A' then 'Excellent'
when achar = 'B' then 'Very Good'
when achar = 'C' then 'Good'
when achar = 'D' then 'Fair'
when achar = 'F' then 'Poor'
else 'No such grade'
end;
dbms_output.put_line('The description was ' || description);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 5:
This sample demonstrates the use of nested case statements. It is
also
permissable to nest case expressions within a case statement (though
it
is not demonstrated here), but nesting of case statements within a
case
expression is not possible since statements do not return any value.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
anum1 number := &anum1;
anum2 number := &anum2;
answer number;
begin
case anum1
when 1 then case anum2
when 1 then answer := 10;
when 2 then answer := 20;
when 3 then answer := 30;
else answer := 999;
end case;
when 2 then case anum2
when 1 then answer := 15;
when 2 then answer := 25;
when 3 then answer := 35;
else answer := 777;
end case;
else answer := 555;
end case;
dbms_output.put_line('The answer is ' || answer);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 6:
This sample demonstrates nesting of case expressions within another
case
expression. Note again the absence of semicolons to terminate both
the
nested case expression and the individual cases of those
expressions.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
declare
anum1 number := &anum1;
anum2 number := &anum2;
answer number;
begin
answer :=
case anum1
when 1 then case anum2
when 1 then 10
when 2 then 20
when 3 then 30
else 999
end
when 2 then case anum2
when 1 then 15
when 2 then 25
when 3 then 35
else 777
end
else 555
end;
dbms_output.put_line('The answer is ' || answer);
end;
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Although PL/SQL anonymous blocks have been used in all of the examples
so far,
case statements and expressions can also be used in procedures,
functions, and
packages with no changes to the syntax.
The following samples are included for completeness and demonstrate the
use of
case statements and/or expressions in each of these scenarios.
Sample 7:
This sample demonstrates use of a case statement in a stored
procedure.
Note that this sample also demonstrates that it is possible for each
of
the items in the case body to consist of more than one statement.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace procedure testcasestmt ( anum IN number ) is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
end;
exec testcasestmt(&anum);
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 8:
This sample demonstrates the use of a case statement in a stored
package.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace package testpkg2 is
procedure testcasestmt ( anum IN number );
function testcasestmt_f ( anum IN number ) return number;
end testpkg2;
create or replace package body testpkg2 is
procedure testcasestmt ( anum IN number ) is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
end;
function testcasestmt_f ( anum IN number ) return number is
begin
case
when anum = 1 then dbms_output.put_line('The number was One');
dbms_output.put_line('In case 1');
when anum = 2 then dbms_output.put_line('The number was Two');
dbms_output.put_line('In case 2');
when anum = 3 then dbms_output.put_line('The number was Three');
dbms_output.put_line('In case 3');
when anum = 4 then dbms_output.put_line('The number was Four');
dbms_output.put_line('In case 4');
when anum = 5 then dbms_output.put_line('The number was Five');
dbms_output.put_line('In case 5');
else dbms_output.put_line('The description was Invalid input');
dbms_output.put_line('In the else case');
end case;
return anum;
end;
end testpkg2;
exec testpkg2.testcasestmt(&anum);
variable numout number
exec :numout := testpkg2.testcasestmt_f(&anum);
print numout
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
Sample 9:
This sample demonstrates the use of a case expression in a stored
package.
- - - - - - - - - - - - - - - - Code begins here - - - - - - - - - - - -
set serveroutput on
create or replace package testpkg is
procedure testcase ( anum IN number );
function testcase_f ( anum IN number ) return number;
end testpkg;
create or replace package body testpkg is
procedure testcase ( anum IN number ) is
anumber number := anum;
anothernum number;
begin
anothernum :=
case
when anumber = 1 then anumber + 1
when anumber = 2 then anumber + 2
when anumber = 3 then anumber + 3
when anumber = 4 then anumber + 4
when anumber = 5 then anumber + 5
else 999
end;
dbms_output.put_line('The number was ' || anothernum);
end;
function testcase_f ( anum IN number ) return number is
anumber number := anum;
anothernum number;
begin
anothernum :=
case
when anumber = 1 then anumber + 1
when anumber = 2 then anumber + 2
when anumber = 3 then anumber + 3
when anumber = 4 then anumber + 4
when anumber = 5 then anumber + 5
else 999
end;
dbms_output.put_line('The number was ' || anothernum);
return anothernum;
end;
end testpkg;
variable numout number
exec testpkg.testcase(&anum);
exec :numout := testpkg.testcase_f(&anum);
print numout
- - - - - - - - - - - - - - - - Code ends here - - - - - - - - - - - -
제약 사항
다음의 databasetype은 case 문에서 지원되지 않는다.
BLOB
BFILE
VARRAY
Nested Table
PL/SQL Record
PL/SQL Version 2 tables (index by tables)
Object type (user-defined type)
All of these types except for object types face a similar restriction
even for if statements (i.e. they cannot be compared for equality directly) so this is unlikely to change for these types. Lack of support for object types is simply an implementation restriction which may be relaxed in future releases.
Reference Ducumment
Oracle 8.1.7 Manual
NOTE:131557.1I have done the following code but doesn't
like the statement of - "case(butNext)". What do you mean "doesn't like" -- did you get an error message?
I'm guessing it won't compile because you're trying to switch on a Button.
I tried something
like "g.fillOval(100,50,70,90, BorderLayout.NORTH)"...no that doesn't make sense. You only use BorderLayout.NORTH when you're adding components to a BorderLayout layout manager. An oval is not a component and fillOval isn't adding a component and Graphics is not a Panel or layout manager.
Would appreciate it if someone could tell me how to position
shapes using the graohic method. I think the problem is that you're confusing shapes with components. -
Partially Bold Text in SSRS 2005 using Expression ?
Hi,
I am using SSRS 2005.
I have one requirment. I need to Partially Bold some part of Text in column.
Below is the Example.
Name < - -- Column in SSRS 2005 Report.
This column contains combination of Last Name and First Name. All Database record contains Last name , while in some record our requirment is to append First Name with that.
That is i aleady handled using Nested IIF Expression.
Now, i want to display appended First Name in normal while all Last Name whihc is Database Field in BOLD Font.
How is it possible ?Hi
I have just saw a possible solution (well done Hentie Stassen!)
The best solution of course is to upgrade to SQL 2008 reporting services.
But, if you are stuck with SQL 2005, try the following:
We know that a possible solution is to have 2 textboxes. One for name, one for surname. Then make the surname bold. This works, but spacing is a big problem as we saw in other examples on this thread. Here is the solution for the
spacing problem:
The idea is to have 1 textbox for the name, with lots of surname textboxes at different positions and only have 1 of these surname textboxes visible.
More detail:
1. The left-most textbox is the Name field.
2. Then have 10 or more Surname textboxes, with Bold and displaying the Surname field. All surnames text boxes overlapping each other, but each one starting about 1cm to the right of the previous one. The first Surname textbox starts about 1cm
to the right of the leftmost point of the Name textbox, overlapping most of it.
3. Now set the visibility property of each of the "Surname" textboxes. All will be hidden by default. Set the visibility of the 1st "surname" to true only if the lenth of the name field is less than 2. Set the visibility
of the 2nd "surname" to true only if the length of name =2, etc.
Have a happy day
Andre Maakal -
I'm using XSQL with MySQL and I want to know if I can achieve a nested XML rowset result without using oracle specific methods.
A general question of mine is: what was the consinderation behind creating a result set like:
<ROWSET>
<ROW>
<STREET>value</STREET>
</ROW>
</ROWSET>
rather then
<ROWSET>
<ROW>
<FIELD name="street">value</FIELD>
</ROW>
</ROWSET>
Any help is appreciated,
StanStan,
Nested rowsets are a feature that only works against the Oracle database, due to the fact that Oracle supports both structured object types (to get nesting/structure) as well as the nested CURSOR() expression in SQL.
Against other DB's it's just flat query results.
You could do two flat queries, then "join" the data using your XSLT transformation and <xsl:key> to make the join faster. -
Any way to search for casts in java source code?
Anyone know of a decent way to search your java source files to find all the casts?
I ended up doing a simple text search for
" = ("(quote marks not included) which works for my code because I am strict about writing my casts with spaces like
String s = (String) iterator.next();Unfortunately, the above search has all kinds of problems with both false positives and negatives. It picks up lots of irrelevant lines like
int index = (number > 0) ? 0 : 1;as well as misses casts that appear nested inside expressions like
((String) iter.next()).charAt(...)I suppose that one could do a regular expression search for any pair of open and close parens which bound non-blank text, but that would pick up even more non-cast expressions in typical java code.
I think that the only way to properly do this is to have a tool which understands java syntax.
Anyone know of an IDE which will do this? Does IntelliJ or Netbeans support this kind of search?
In case you are wondering why I am interested in this, it is because I am refactoring some code to fully use generics, and searching for casts is one source of identifying candidates for genericity.cliffblob wrote:
Better late than never?Yes!
cliffblob wrote:
...The answer I found to ID unnecessary casts was, using Eclipse IDE, In compiler error and warning preferences to warn on unnecessary casts.Thanks for pointing IDEs out. I just opened IntelliJ, and going back to at least version 7.04 (maybe earlier) they have an inspection for "Redundant type cast".
cliffblob wrote:
I would still be interested to know if there is a way to identify casts in general in your source, perhaps now four years later there is a way?The only solutions that I can think of are either a complicated regex search, or you must use some tool like an IDE that understand Java syntax and can determine if a cast is happening. -
Maximum Open Cursors Exceeded problem in XSQL
Hi,
We are processing an XSQL page by calling XSQLRequest.process() programatically within our application. Within the XSQL page there are several queries which involve multiple nested CURSOR expressions... when the query returns enough rows we are running into the error "ORA-00604: error occurred at recursive SQL level 1 ORA-01000: maximum open cursors exceeded".
When searching this forum I have seen many (old) postings regarding this error and a bug in the XDK... seems like it was some time ago, but while we set about improving the structure of our XSQL page (or increasing the max open cursor init parameter currently at 500 or both) can anyone confirm that this bug no longer exists?
Also, any general suggestions on working around this limit rather than increasing it? We have considered splitting up our queries into smaller queries (and merging the results via XSLT) and closing cursors during the session explicitly by issuing commits within the XSQL page... but any better ideas?
Thanks,
BobI have found this max open cursors problem to be related to Statement object not being closed. This presents a problem for the use of PreparedStatements, because they are only useful if you can keep them open and resuse them. However, in doing so, each iteration through the PreparedStatement creates another open cursor in the databse rather than reusing the previous one. A work around I discovered by reading about REF CURSORS and I use in JDBC is as follows:
Assuming a previously prepared PreparedStatement pstmt and a ResultSet rset-
while (rset.next()) {
rset.close();
// This line closes the cursor in the database
// but does not require you to re-prepare the
// PreparedStatement. Don't ask me why--ask the
// Oracle API guys.
rset.getStatement().close();
// make ready for GC
rset = null; -
Decode Statement Inside the Case statement
Can we use Decode Statement inside a CASE Statement as show below --
It is giving an error -- Is the a better way to write with out any error
create or replace
function test (a varchar2) RETURN VARCHAR2
is
m varchar2(20);
begin
m :=
CASE
WHEN a IN (
'1009' -- (soon obsolete)
,'1010'
,'1019'
,'1051'
,'XGP'
,'XSC')
THEN (SELECT DECODE(v_lef_cd,'NAM','71','GLB','99','01') into m FROM DUAL)
-- ) THEN '01' -- UNITED STATES OF AMERICA
WHEN a IN (
'1069' -- South Africa
,'SAO' -- South Africa
,'SA' -- South Africa
) THEN '26' -- South Africa
ELSE NULL
END;
return m;
end;Hi,
You can only use DECODE in SQL statements.
Your SELECT DECODE (...) INTO statement would work anywhere a PL/SQL statement is allowed; but PL/SQL statements are not allowed within CASE expressions.
Remember, the expression that comes after THEN in a CASE expression must be a single value.
I would write a function like this using IF ... ELSIF statements. It's a little more typing than CASE, but a lot easier to code, test and maintain.
If you want to use CASE, here's one way:
... m := CASE
WHEN a IN ('1069', 'SAO', 'SA')
THEN '26' -- South Africa
WHEN a NOT IN ('1009', '1019', '1051', 'XGP', 'XSC')
OR a IS NULL
THEN NULL
WHEN v_lef_cd = 'NAM'
THEN '71'
WHEN v_lef_cd = 'GLB'
THEN '99'
ELSE '01' -- USA
END;This assumes that you have a variable v_lef_cd defined.
If you want, you can nest CASE expressions, like this:
... m := CASE
WHEN a IN ('1069', 'SAO', 'SA')
THEN '26' -- South Africa
WHEN a IN ('1009', '1019', '1051', 'XGP', 'XSC')
THEN CASE v_lef_cd
WHEN 'NAM'
THEN '71'
WHEN 'GLB'
THEN '99'
ELSE '01' -- USA
END
END;Always format your code, so you can see where the CASE expressions and each of the WHEN clauses begin and end.
When posting formatted text on this site, type these 6 characters:
(all small letters, inside curly brackets) before and after sections of formatted text, to preserve spacing. -
Case statement on Variable SSIS
Hi friends,
I have a small issue in my package I would like to write a case statement on Variable or Column in derived column Transformation
I was using forloop container that pulls the data from different database so the database names also loading into table under one of the column but I wanna load with integer value instead database name
for example
Database A -- 1
Database B -- 2
so I would like to write a case statement on variable or column but It was not allowing me to write when I tried.
what I have tried was I took one derived transformation and added one new column and passed that variable to that new column.
then again I took another derived transformation here I was trying to write case statement on the colum which is belongs to previous derived column.
Derived Column Tran 1:
Derived Column Name Expression DataType
RegionID @[User::InitialDB] Unicodestring[DT_WSTR]
Derived Column Tran2:
Can anyone please check and guide me the solution please.
Thanks for your helpHi BandSr,
You were close, just missing the false part in your second conditional operator.
[RegionID] == "KAPS" ? "1" : [RegionID] == "LAPS"? "2" : ""
In fact, I won't call that a Case statement but rather a nested conditional expression.
Hope this helps.
~ J.
Maybe you are looking for
-
This has only been happening since updating my iPhone 5 to the new IOS 7.0.2 software and it has duplicated a new purchased playlist on my iTunes library. I have tried syncing the iPhone to my computer but still no luck they are not showing up in my
-
Hi guys, i have the problem that the keys "7, U, J" and "M" on my keypad are not working. Just nothing happens when I press them. I already removed the rubber-keypad once and pushed the real buttons beneath it. This didn't help. I also tried a hard r
-
Hi, My vendor recommended to use Oracle 11.1.0.7 + last patch bug.But i m confuse,what did he meant by last patch bug?? Can any one help me to determine last patch bug??And would would the number??I m using windows 64 bit. Thanx....
-
Adobe Flash Player Inhalte werden nicht angezeigt
Hallo, ich bin hier gerade am verzweifeln. Bin gestern aus dem Urlaub zurück und wollte heute ein paar stream´s gucken. Diese funktionieren leider nicht und selbst der PC ist sich unsicher ob ich Flash Player installiert habe oder nicht. Auf diesem L
-
Here i want to get the columns names in the table "employee" in my database so i used databaseMetaData.getColumns(); but give me this error: java.sql.SQLException: Column not found at sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(JdbcOdbcResultSet.java: