EJB QL 2.1 and oracle empty string values
Hello,
I�ve written a simple finder with ejb ql. One arg is a string which can be empty. My problem is, that oracle treats empty strings as null and so it seems to be impossible to write one general query for it:
select object(a) from example a where a.test1 = ''
returns nothingselect object(a) from example a where a.test1 is null
the row where test1 is nullDoes anyone know a solutions for this issue? I think the ejb ql is not really portable in this way?
Greetings,
Thilko
To me, it looks like any class that has a comparator should work:
Sec 11.2.6.7 of the 2.1 draft has as syntax for BETWEEN:
"arithmetic_expression [NOT] BETWEEN arithmetic-expression AND arithmetic-expression"
Sec. 11.2.6.6 of the 2.1 draft says:
"Arithmetic expressions can be used in comparison expressions. Arithmetic expressions are composed of other arithmetic expressions, arithmetic operations, path expressions that evaluate to numeric values,
and numeric literals."
However, since 2.1 is still in draft the "implementations" may or may not fully support it. You should mention what product you're using when you post here (e.g. RI, Weblogic, Websphere, etc.)
Similar Messages
-
Differnce between null string and an empty string??
what is the major difference between null string and an empty string??
I wrote the following simple program and I could see some different output.
Other than that, any other differences that we should pay attention to???
C:\>java TestCode
Hello
nullHello
public class TestCode
public static void main(String[] s)
{ String s1 = "";
String s2 = null;
System.out.println(s1 + "Hello");
System.out.println(s2 + "Hello");
}There's a big difference between the two. A null String isn't pointing to an object, but an empty String is. For example, this is perfectly fine:
public class TestCode
public static void main(String[] args)
String s = "";
System.out.println(s.length());
} It prints out 0 for the length of the String, just as it should. But this code will give you a NullPointerException:
public class TestCode
public static void main(String[] args)
String s = null;
System.out.println(s.length());
} Since s isn't pointing to anything, you can't call its methods. -
Parameters To Include Null Or Empty String Values
I have a table that has both Nulls & Empty Strings that I want to use as a Dynamic Parameter. Even though there is an indication of the Null/Empty String value when the parameter prompt comes up, selecting the value of Null/Empty String results in no records being returned. I have a formula to display the values in the report (where I substitute "Unknown" for the Null/Empty String values), but I am not able to do a parameter on that formula.
I guess in general, this is a situation of needing to be able to use a Dynamic Parameter based on a formula field.
Thanks for any assistance!
Edited by: Dragon77 on Apr 2, 2010 9:39 AMI'd use a SQL Command as the data source for the list of values. Something like this... (MS SQL Server)
SELECT DISTINCT
CASE WHEN t.StringField IS NULL OR t.StringField LIKE ''
THEN 'Unknown' ELSE t.StringField END AS StringField
FROM TableName AS t
ORDER BY StringField
Then use a formula like this in the selection criteria.
IF {?Parameter} = "Unknown"
THEN (ISNULL ({TableName.StringField}) OR {TableName.StringField} LIKE "")
ELSE {TableName.StringField} = {?Parameter}
HTH,
Jason -
UCCX 8.5.1 - Expression editor and a variable string value error
I receive the followng error when trying to create a varialbe string value using the expression editor. The string value that I am trying to create is used with the Create URL Document Object. The popup error states 'Unable to parse expression: Couldn't repair and continue the parsing on token #ID 'FindCaseByCaseNumber' (line 1, col:24)' The string value is "<Message MessageType="FindCaseByCaseNumber" Source="APIMessage" ReferenceNumber="1" NodeID="1" UserID="1"><CaseNumber>"05-CP-001842"</CaseNumber></Message>". The editor will not let me save the string value with quotation marks being used in the string value, exampe "FindCaseByCaseNumber". When I remove the quotation marks from the string value the editor will save the value but then the variable will not work.
Has anyone encountered this same problem or know what to replace the "" to terminate the string value? I have tried brackets, but this does not work. Any suggestions are greatly appreciated!I found my answer. It appears that ${}, #{}, and ' will let you add a sub-variable to a variable string value.
-
Difference between null string and empty string??
what is the major difference between null string and an empty string??
I wrote the following simple program and I could see some different output.
Other than that, any other differences that we should pay attention to???
C:\>java TestCode
Hello
nullHello
public class TestCode
public static void main(String[] s)
{ String s1 = "";
String s2 = null;
System.out.println(s1 + "Hello");
System.out.println(s2 + "Hello");
}The difference is that an empty String is just empty but a null String has no value (i.e. it is not instantiated) this has signifigance since all Strings are objects.
-
How to distinguish NULL and Empty Strings
Hi,
Just to set the context right; I'm an experienced C programmer trying labview for the first time. As such I ran in to a problem being that Labview has no concept of NULL-pointers and more specifically appears to have no concept of the difference between a NULL-string and an empty-string
I'm trying to make a structure (bundle) of strings (in it's most basic form key-value pairs) which i'd like to (for instance) URI encode in order to send it to a web server. For those who are not familiar with URI encoding; there is a distinguished difference between setting a key to an empty string and setting a key with no value. In C I would use a pointer to an empty string vs a NULL string pointer to symbolize this.
In essence I need an elegant way to distinguish between a defined but empty string and an undefined string (hmmm this is actually describing the same problem but now in terms of perl).
Anybody have any pointers (pun not intended) for me ?This is a bit depending on the interface you have with your encoder. The whole issue is that LV has no pointers at all (and you will like it, as you will never have any Null-Pointer exeptions and the like).
Assuming that you use a dll (so the Call Library node).
Use CString as input -> NULL-Terminated String.
Use I32 as input and pass 0 -> NULL string.
Felix
www.aescusoft.de
My latest community nugget on producer/consumer design
My current blog: A journey through uml -
What is the difference between String Constant and Empty String Constant
What is the difference between string constant which does not contain any value and the Empty string constant?
While testing a VI which contain a normal string constant in VI analyzer, it gives error to change string constant with the empty string constant?
Please Reply
prabhakant
Regards
Prabhakant PatilReadability.
Functionally, they are the same. From a coding standpoint, the Empty String Constant is unambiguous.
It is empty and will always be; good for initialization. Also, because you can not type a value into and Empty String Constant, someone would need to conciously replace it to set a 'default' value that is something other than NULL.
Now is the right time to use %^<%Y-%m-%dT%H:%M:%S%3uZ>T
If you don't hate time zones, you're not a real programmer.
"You are what you don't automate"
Inplaceness is synonymous with insidiousness -
Using J2EE EJB Container and Oracle 8.1.7
I am trying to setup the J2EE EJB container to use and Oracle 8.1.7 database instead of Cloudscape. So far I have done the following
0. Created the table for the Savings Account tutorial in the Oracle Database.
1. Added the Classes12.jar (Oracle's latest JDBC thin drivers) to my CLASSPATH
2. Under "Server Configuration" I added the standard/jdbc drivers value: "oracle.jdbc.driver.OracleDriver".
3. Under "Server Configuration" I added the standard/datasource value: JNDI name "jdbc/Oracle" and JDBC URL "jdbc:oracle:thin:@10.1.1.254:1521:DEV".
4. For the savings account tutorial, when deploying I specified "jdbc/Oracle" for the reference "jdbc/SavingsAccountDB".
I have gotten this tutorial to work using the Cloudscape database. After I did the previous steps and tried to run the client, I get no valid driver available, unable to connect to Oracle.
What else to I need to do?
My setup is:
Windows 2000 Professional
J2EE (JDK 1.3.1)
Oracle 8.1.7
Thank you in advance.Exactly which classpath did you add the Oracle JDBC library jar to ?
The thing that works for me is to have the following line in the file %J2EE_HOME%\bin\userconfig.bat
set J2EE_CLASSPATH=D:\DownLoad\Oracle\classes12_01.zip; -
JDBC Receiver does not convert empty string to NULL
Hello experts,
I am facing a problem with an INSERT statement to ORACLE DB where some of the fields are empty, for example:
- <STATEMENT_VLP_CONT_DETAILS>
- <TABLE_VLP_CONT_DETAILS ACTION="INSERT">
<TABLE>VLP_CONT_DETAILS</TABLE>
- <ACCESS>
<VLP_HDR_ID>43</VLP_HDR_ID>
<VLP_CONT_LINE_ID>1</VLP_CONT_LINE_ID>
<QUANTITY>1</QUANTITY>
<OWNER>CBHU</OWNER>
<SERIAL_NO>3372739</SERIAL_NO>
<CONT_ISO_CODE>2300</CONT_ISO_CODE>
<WEIGHT>6.44</WEIGHT>
<POL>ILASH</POL>
<POD>FRFOS</POD>
<FD>FRFOS</FD>
<OPER_CODE>COS</OPER_CODE>
<CUR_STOW_LOC>150102</CUR_STOW_LOC>
<PRV_STOW_LOC />
<HAZARDOUS>N</HAZARDOUS>
In the JDBC Receiver comm channel I selected: Interpretation of Empty String Values = NULL Value.
It seems the empty strings are not converted to NULL values as can be seen in the reflected SQL statement in RWB:
INSERT INTO VLP_CONT_DETAILS (VLP_HDR_ID, VLP_CONT_LINE_ID, QUANTITY, OWNER, SERIAL_NO, CONT_ISO_CODE, WEIGHT, POL, POD, FD, OPER_CODE, CUR_STOW_LOC, PRV_STOW_LOC, HAZARDOUS, EMPTY, REFER, OOG, HAZARD_IMDG, TEMP_SET, TEMP_MIN, TEMP_MAX, FRONT_OVL, REAR_OVL, RIGHT_OVW, LEFT_OVW, OVERHEIGHT, COMMODITY, BOOKING_REF, ALLOTMENT, YARD_LOC, LD_SEQ_CRANEID, LD_SEQ_NUMBER, LD_STATUS, STACKABLE, OPT_PORT_CODE1, OPT_PORT_CODE2, OPT_PORT_CODE3) VALUES (44, 1, 1, CBHU, 3372739 , 2300, 6.44, ILASH, FRFOS, FRFOS, COS, 150102, , N, N, N, N, , , , , , , , , , , , , , , 0, 64, N, , , )
So, I am getting the following error:
Could not execute statement for table/stored proc. "VLP_CONT_DETAILS" (structure "STATEMENT_VLP_CONT_DETAILS") due to java.sql.SQLException: ORA-00936: missing expression
Help would be appreciated.Hi Effi,
There is a mismatch in the field and thier value.
Here field id 37
VLP_HDR_ID, VLP_CONT_LINE_ID, QUANTITY, OWNER, SERIAL_NO, CONT_ISO_CODE, WEIGHT, POL, POD, FD, OPER_CODE, CUR_STOW_LOC, PRV_STOW_LOC, HAZARDOUS, EMPTY, REFER, OOG, HAZARD_IMDG, TEMP_SET, TEMP_MIN, TEMP_MAX, FRONT_OVL, REAR_OVL, RIGHT_OVW, LEFT_OVW, OVERHEIGHT, COMMODITY, BOOKING_REF, ALLOTMENT, YARD_LOC, LD_SEQ_CRANEID, LD_SEQ_NUMBER, LD_STATUS, STACKABLE, OPT_PORT_CODE1, OPT_PORT_CODE2, OPT_PORT_CODE3
And value is 35
44, 1, 1, CBHU, 3372739 , 2300, 6.44, ILASH, FRFOS, FRFOS, COS, 150102, , N, N, N, N, , , , , , , , , , , , , , , 0, 64, N, , ,
Give empty values for nuil fields so that they can be made NULL by jdbc adapter
Regards
Suraj -
What is in the column, empty string, null or ....?
I am using Oracle 11.2, have one table tb_class as following:
TB_CLASS (id number(3), nm varchar2(32), seqNum number(3));
1, ,212
2,'as', 12
3, 'qq', 12
select * from TB_CLASS where id=1 and nm=null; ...no row selected
select nvl(nm) from TB_CLASS where id=1; ...1 row selected
Any one know what is in column nm for row id=1? I thought it is empty string, but why it returns no row in the first query?
Thanks!1) In Oracle there is no difference between NULL and the empty string.
2) NULL is never equal to anything (including another NULL). NULL is never unequal to anything (including another NULL). You need to use the IS NULL and/ or IS NOT NULL operators in order to look for NULL values
SELECT *
FROM tb_class
WHERE nm IS NULLor
SELECT *
FROM tb_class
WHERE nm IS NOT NULLOf course, it is also possible that you are stating that the NM column contains one or more spaces or that it contains one or more non-printable characters rather than a NULL. That's why you were asked what dump(nm) returns
Justin -
Hi SQlers ...
I'm using Oracle 8.1.7 ... and Oracle maps the literal empty
string value, to the NULL value ... it that the expected result?
simple example:
SELECT 1 from dual where ('' is null)
I've tried the same on others rdbms, and of course, the
result is not the same.
thanks in advance
saludos
dario estepario ...Yup. In Oracle the empty string '' and NULL are identical, though they periodically threaten that this may change in the future.
Justin -
How to define the boolean - String value mapping for SelectBooleanCheckBox?
I have a SelectBooleanCheckBox component whose value is bind to a bean property of type String.
<af:selectBooleanCheckbox text="State" label="State" id="sbc1"
value="#{viewScope.myBean.stateText}" autoSubmit="true"/>
The expected value for the Bean property is "Accepted" (for true) and "Rejected" (for false).
Currently, the component return String value "true" for checked and "false" for unchecked.
How do I set up the component so the boolean value can map to my expected String value?Sumit,
Thanks for the response.
I read that post too. However, I don't have any binding in my case because the component is bind to a bean property instead of an attribute of a view object.
Without the binding in the page definition, I can't find a place to define the mapping between the Boolean value and the expected String value.
Pricilla -
Oracle, Null and empty Strings
Currently I'm facing problems with a class, which contains a String, which
is set to "" (empty String).
When the class is persistent, oracle writes null to the table column
(which seems to be common oracle behaviour) and when retrieving the class,
the field is set to null as well, giving me a lot of null-pointer
exceptions.
Anyway ... I can cope with that (just a lot of extra work)
far worse is the problem, wenn searching objects, that have this field set
to "" oder null.
Oracle can't find the records because JDO creates Querys "where
string=null" or "where string=''" , where oracle expects "where string is
null" to find the records.
Is there a workaround or solution ?Yeah, that would work as well, thx, but since I have to cope with
null-Strings now everywhere in my program, it doesn't hurt just to forbid
empty strings on the program side.
In future times I'll test on Oracle first, then porting to DB/2 - this way
I suppose work is far less to garant compability.
Nevertheless ... having to set the bankcode into quotes is a kodo bug in
my opinion.
Kodo knows the type of classfields (in this case string) and shouldn't
send the parameter as a BigDecimal to the database.
Given that, and having only bankcodes of null (only neccesary when using
Oracle), the method would look like:
public Collection getAccounts (String bankCode)
throws Exception
return getAccounts (Account.class, "bankcode=="+bankcode);
which is how a transparent persistent layer, um, should be , um , I mean
... just transparent ;-D
Marc Prud'hommeaux wrote:
Stefan-
Couldn't you just do something like:
public Collection getAccounts (String bankCode)
throws Exception
String filter;
if (bankCode == null || bankCode.length () == 0)
filter = "(bankCode == null || bankCode == "")";
else
filter = "bankCode == "" + bankCode + """;
return getAccounts (Account.class, filter);
If I understand the problem correctly, this should work for all the
databases.
In article <[email protected]>, Stefan wrote:
What operations are you performing to cause this SQL to be issued? You
say you are having trouble removing objects, but this is clearly not a
DELETE statement. Is this the SQL that is issued when looking up
objects by identity?I'm not removing objects, I was removing just quotes from parameters ;-)
A string column... is it also represented as a string field in your class?Yeah ... just to give you an impression of the code:
First we have a class, representing a bank account:
public class Account {
private AccountMgr myAccountMgr;
private String bankCode;
private String id;
Note, that in nearly all cases bankCode will be a number or null.
I have a second class "AccountMgr", which does all of the persistant stuff
(seaching, making persistent etc.)
This class has two methods, one versatile (protected) to retrieve accounts
by a given filterString and one who just returns accounts by bankCode,
building the expected filterstring. Here is my current working version:
public class AccountMgr {
public Collection getAccounts(String bankCode) throws Exception {
if (bankCode!=null) {
if (bankCode.equals("")) {
throw new Exception("check code, bankCode='' not allowed to get
same behavior from DB2 and Oracle");
// if set, quote the bankCode
bankCode="""+bankCode+""";
return getAccounts(Account.class,"bankCode=="+bankCode);
protected Collection getAccounts(Class accountClass, String filterAdd)
throws Exception {
PersistenceManager pm = MyHelper.getPersistenceManager();
String filter="";
if (filterAdd!=null && !filterAdd.trim().equals("")) {
filter+=filterAdd + " && ";
filter += "myAccountMgr==_accMgr";
Query query = pm.newQuery(accountClass, filter);
query.declareParameters("AccountMgr _accMgr");
return (Collection) query.execute(this);
As you can see, in the first method I have to set the bankCode into
quotes, when it's not null.
This is because otherwise a filter like "bankCode=1234" will be translated
in a way, where 1234 is send as a BigDecimal to the database:
[...] executing statement <4239745>: (SELECT [...] FROM JDO_ACCOUNT t0
WHERE t0.BANKCODE = ? : [reused=1;params={(BigDecimal) 1234}]
Marc Prud'hommeaux [email protected]
SolarMetric Inc. http://www.solarmetric.com -
Hi All,
i'm porting my application to Oracle and i'm experiencing (big) issues since empty strings are treated as null by Oracle.
This is a big issue for me since my application uses empty and null values as two different things (indeed they are different !!), ie, i'm not having null pointer exception, but wrong behavior.
I'm thinking what's the best approach to follow since my appl. must work also on mysql and postgres.
Three options at the moment:
1. implement a jdbc wrapper that converts any empty string in something like '~'.
2. using aspectj, add some aspects to setString/getString converting any empty string in something like '~'.
3. buy a commercial driver that makes difference between empty and null (using aforementioned approaches ?).
I think that this difference in Oracle is really an impediment in doing applications db neutral and I'd like to ask your opinion about the best solution (if someone already resolved it as i guess).
Does anyone know if there are commercial jdbc driver that can help me ?
Does anyone know how ORM frameworks (like hibernate) handle this case ?
Thanks in advance
stejschell wrote:
nichele wrote:
jwenting wrote:
If NULL really is different in your context from an empty string you're going to have to define some sequence of characters as indicating an empty string.yes, this is what i need to implement.Sounds like a flawed design then.
I'm wondering what's the best approach in order to avoid to change all my application isolating this behavior somewhere (wrapping the jdbc driver for instance).That doesn't make much sense to me. You should already have a database layer. You change the database layer. If you don't have a database layer then that means you have another design flaw. And in that case I would really not be the one that needs to maintain that code base.I thought a bit about the value of your answer...but i didn't find it ....sorry but i don't like who replies on forum just to say bad design/bad choice etc...if you have any kind of suggestion you are welcome, otherwise you can spend your time in doing something else instead of reply to this thread. -
Hi There,
As far as I know, Null is not the same as an empty string; however, when I try this out, I get some unexpected results (well, at least unexpected for my liking):
SQL> CREATE TABLE TS (MID NUMBER,
2 MDESC VARCHAR2(20) DEFAULT '' NOT NULL);
Table created.
SQL> INSERT INTO TS VALUES(1,'');
INSERT INTO TS VALUES(1,'')
ERROR at line 1:
ORA-01400: cannot insert NULL into ("TT"."TS"."MDESC")So, according to the above scenario, I can't insert an empty string!! However, an empty string is a valid string that doesn't have tuples/data!!
How come Oracle translates the null string '' as NULL?
ThanksWilliam Robertson wrote:
There is a special case to do with CHAR values, whereby '' counts as a string and so gets blank-padded, whereas NULL does not.Are you referring to:
SQL> DECLARE
2 flag CHAR(2);
3 PROCEDURE check_null (p_flag IN CHAR)
4 IS
5 BEGIN
6 IF p_flag = ' '
7 THEN
8 dbms_output.put_line ('flag is equal to '' ''');
9 ELSIF p_flag IS NULL
10 THEN
11 dbms_output.put_line ('flag is null');
12 ELSE
13 dbms_output.put_line ('other');
14 END IF;
15 END;
16 BEGIN
17 flag := '';
18 check_null (flag);
19 flag := NULL;
20 check_null (flag);
21 end;
22 /
flag is equal to ' '
flag is null
PL/SQL procedure successfully completed.
SQL> alter session set events '10932 trace name context forever, level 16384';
Session altered.
SQL> DECLARE
2 flag CHAR(2);
3 PROCEDURE check_null (p_flag IN CHAR)
4 IS
5 BEGIN
6 IF p_flag = ' '
7 THEN
8 dbms_output.put_line ('flag is equal to '' ''');
9 ELSIF p_flag IS NULL
10 THEN
11 dbms_output.put_line ('flag is null');
12 ELSE
13 dbms_output.put_line ('other');
14 END IF;
15 END;
16 BEGIN
17 flag := '';
18 check_null (flag);
19 flag := NULL;
20 check_null (flag);
21 end;
22 /
flag is null
flag is null
PL/SQL procedure successfully completed.
SQL> SY.
P.S. Don't ask me why normal (or at least consistent) behavior is not the default.
Maybe you are looking for
-
I am having a problem with Windows Fusion installed on a MacBook.
I am having a problem with Windows Fusion installed on a MacBook OS 10. When attempting to use a Browser, (either IE, or Chrome), under Windows Fusion, I cannot browse to ANY page except Gmail.com. I checked all security settings, and found no probl
-
Last year I used Firefox. Once when I upgraded it would not start. Now 7 Sep 2011 I tried the latest download and got this error message and the program will not start. Help!
-
Error while sending Email through Java Code in OIM
Hi All, I have created a java code using tcEmailNotificationUtil, and integrated the same with the adapter. I am triggering this adapter when an approval process gets completed. As soon as the approval process gets completed my email task is triggeri
-
Is Oracle Workflow customization possible using APIs?
Our Purchase Requisition gets approved through Oracle Workflow Notifications. Now I need to change Recipient of Notification,i.e. to change workflow on runtime (by using trigger on wf_notifications table) depending on some conditions. Please help whi
-
Problem trying to cataloge a jar file OBPM 10.3.1.0
Hi, I´m having problems when i cataloge a jar file, in OBPM suite 10.3.1.0, it is an itext jar file. I´ve been trying to cataloge older and newer versions of the Itext jar file but there´s no difference in the outcome. I create the external resource,