Probleme portage mysql -> oracle (JDBC) - SQL/NoSQL - Programmation
MarshPosté le 22-04-2005 à 17:30:27
Salut, j'ai un portage de mon appli java qui etait à la base basé sur mysql sous Oracle en cours.
Dans l'ensemble tout est ok (mis à part que j'avais dans le nom de mes colonnes des mots reservés oracle mais ça s'est arrangé depuis longtemps ... à ma decharge cette liste est longue et presente des mots forts courants )
Mais subsite un souci, quand dans une requete je parametre un element via un setstring(toto) si toto est la chaine vide (vide mais pas null) alors je me retrouve avec NULL dans ma base de donnée car y a un souci de norme avec Oracle ...
Another problem when programming jdbc codes: "INSERT INTO person VALUES ('100')" //here, the field is an integer, but I insert as a string The above SQL can work well on both oracle and postgresql, but: "INSERT INTO person VALUES ('')" can work only on oracle but not work on postgresql. On oracle, a default value will be inserted, but postgresql will report an error.
Here the problem is that Oracle is not following the ANSI Standard. The standard says the '' = empty string which is how postgres correctly interprets it. In Oracle '' = null, which is a violation of the spec. Thus you are going to get different behavior in Oracle than in postgres. This code really should be doing the following which is in compliance with the sql spec and will work on both oracle and postgres: INSERT INTO person VALUES(null) "
" Q. Why do I get an "ORA-01400: Cannot insert NULL into column name" when inserting a blank string?
A. This is a known Oracle issue. When inserting or updating a value for a varchar2, if you try to insert an empty string ("" ), Oracle interprets the value as NULL. If there is a NOT NULL restriction on the column in which you are inserting the value, the database throws the ORA-01400 error. "
donc dans pas mal de parametres je me retrouve avec des null partout et à la lecture apres lors de get sur des resultats de requetes je me retrouve avec des null java ce qui va jusqu'à planter mon appli
Quelle solution propre adopter ? (j'en ai trouvé une qui consiste à rajouter dans la definition de mes tables oracle des valeurs par defaut systematiquement sur les champs en question mais je suis pas ravi )
Marsh Posté le 22-04-2005 à 17:30:27
Salut,
j'ai un portage de mon appli java qui etait à la base basé sur mysql sous Oracle en cours.
Dans l'ensemble tout est ok (mis à part que j'avais dans le nom de mes colonnes des mots reservés oracle mais ça s'est arrangé depuis longtemps ... à ma decharge cette liste est longue et presente des mots forts courants )
Mais subsite un souci, quand dans une requete je parametre un element via un setstring(toto)
si toto est la chaine vide (vide mais pas null) alors je me retrouve avec NULL dans ma base de donnée car y a un souci de norme avec Oracle ...
cf http://archives.postgresql.org/pgs [...] g00219.php
"
Another problem when programming jdbc codes:
"INSERT INTO person VALUES ('100')" //here, the field is an integer, but I insert as a string
The above SQL can work well on both oracle and postgresql, but:
"INSERT INTO person VALUES ('')"
can work only on oracle but not work on postgresql. On oracle, a default value will be inserted, but postgresql will report an error.
Here the problem is that Oracle is not following the ANSI Standard. The standard says the '' = empty string which is how postgres correctly interprets it. In Oracle '' = null, which is a violation of the spec. Thus you are going to get different behavior in Oracle than in postgres. This code really should be doing the following which is in compliance with the sql spec and will work on both oracle and postgres:
INSERT INTO person VALUES(null)
"
ce qui est confirmé là
http://e-docs.bea.com/wls/docs70/f [...] tml#251569
"
Q. Why do I get an "ORA-01400: Cannot insert NULL into column name" when inserting a blank string?
A. This is a known Oracle issue. When inserting or updating a value for a varchar2, if you try to insert an empty string ("" ), Oracle interprets the value as NULL. If there is a NOT NULL restriction on the column in which you are inserting the value, the database throws the ORA-01400 error.
"
donc dans pas mal de parametres je me retrouve avec des null partout
et à la lecture apres lors de get sur des resultats de requetes je me retrouve avec des null java ce qui va jusqu'à planter mon appli
Quelle solution propre adopter ? (j'en ai trouvé une qui consiste à rajouter dans la definition de mes tables oracle des valeurs par defaut systematiquement sur les champs en question mais je suis pas ravi )