Thread: Possible to insert quoted null value into integer field?
Hi all, I have search high and low on this - Take for instance the statement : insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); On Pg 7.2.x, the db would happily insert the null val into the int field. HOWSOMEVER, 7.4.x will explode and error back with: "DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: "" at /cgi-bin/foo line xxx" I see what it is complaining about but I am wondering if there is any way to roll back this feature, as I have this cheesy bit of perl that dynamically builds the query and quotes everything and I don't want to have to change all occurrences to insert the NULL or worse yet try to differentiate between int/string. Many thanks, P
"Pablo S" <pablo_tweek@yahoo.com> wrote: > Hi all, I have search high and low on this - > > Take for instance the statement : > > insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); > > On Pg 7.2.x, the db would happily insert the null val into the int > field. HOWSOMEVER, 7.4.x will explode and error back with: > > "DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: > "" at /cgi-bin/foo line xxx" > > I see what it is complaining about but I am wondering if there is any > way to roll back this feature, as I have this cheesy bit of perl that > dynamically builds the query and quotes everything and I don't want to > have to change all occurrences to insert the NULL or worse yet try to > differentiate between int/string. if all else fails, you might use a view mirroring the original table, but with int1 defined as varchar, with rules handling the conversion at insert/update. gnari
On 8/26/2004 4:27 AM, gnari wrote: > "Pablo S" <pablo_tweek@yahoo.com> wrote: > > >> Hi all, I have search high and low on this - >> >> Take for instance the statement : >> >> insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); >> >> On Pg 7.2.x, the db would happily insert the null val into the int >> field. HOWSOMEVER, 7.4.x will explode and error back with: You aren't inserting an SQL NULL value. You try to insert an empty string, which is not a valid integer representation. Jan >> >> "DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: >> "" at /cgi-bin/foo line xxx" >> >> I see what it is complaining about but I am wondering if there is any >> way to roll back this feature, as I have this cheesy bit of perl that >> dynamically builds the query and quotes everything and I don't want to >> have to change all occurrences to insert the NULL or worse yet try to >> differentiate between int/string. > > if all else fails, you might use a view mirroring the original > table, but with int1 defined as varchar, with rules handling the > conversion at insert/update. > > gnari > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com #
Jan Wieck wrote: > On 8/26/2004 4:27 AM, gnari wrote: > >> "Pablo S" <pablo_tweek@yahoo.com> wrote: >> >> >>> Hi all, I have search high and low on this - >>> Take for instance the statement : >>> insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); >>> >>> On Pg 7.2.x, the db would happily insert the null val into the int >>> field. HOWSOMEVER, 7.4.x will explode and error back with: > > > You aren't inserting an SQL NULL value. You try to insert an empty > string, which is not a valid integer representation. > > > Jan And IIRC for oracle an empty string is a NULL value :-( Regards Gaetano Mendola
On 8/26/2004 5:33 PM, Gaetano Mendola wrote: > Jan Wieck wrote: > >> On 8/26/2004 4:27 AM, gnari wrote: >> >>> "Pablo S" <pablo_tweek@yahoo.com> wrote: >>> >>> >>>> Hi all, I have search high and low on this - >>>> Take for instance the statement : >>>> insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); >>>> >>>> On Pg 7.2.x, the db would happily insert the null val into the int >>>> field. HOWSOMEVER, 7.4.x will explode and error back with: >> >> >> You aren't inserting an SQL NULL value. You try to insert an empty >> string, which is not a valid integer representation. >> >> >> Jan > > And IIRC for oracle an empty string is a NULL value :-( Who cares about Oracle? They are different things in the ANSI standard. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com #
Jan Wieck wrote: > On 8/26/2004 5:33 PM, Gaetano Mendola wrote: > >> Jan Wieck wrote: >> >>> On 8/26/2004 4:27 AM, gnari wrote: >>> >>>> "Pablo S" <pablo_tweek@yahoo.com> wrote: >>>> >>>> >>>>> Hi all, I have search high and low on this - >>>>> Take for instance the statement : >>>>> insert into foo (text1, text2, int1) values ('Foo', 'Bar', ''); >>>>> >>>>> On Pg 7.2.x, the db would happily insert the null val into the int >>>>> field. HOWSOMEVER, 7.4.x will explode and error back with: >>> >>> >>> >>> You aren't inserting an SQL NULL value. You try to insert an empty >>> string, which is not a valid integer representation. >>> >>> >>> Jan >> >> >> And IIRC for oracle an empty string is a NULL value :-( > > > Who cares about Oracle? They are different things in the ANSI standard. :-( ^^^ Regards Gaetano Mendola
Gaetano Mendola wrote: > >>> And IIRC for oracle an empty string is a NULL value :-( >> >> >> >> Who cares about Oracle? They are different things in the ANSI standard. > > > :-( > ^^^ > Seems like you could handle this with a rule: create rule as on insert to my_table where new.that_column = '' do instead insert into my_table (col_a, col_b, that_col) values (new.col_a, new.col_b, NULL); Or would this break long before the rule got involved, because new.that_column has a bad value? -- (Posted from an account used as a SPAM dump. If you really want to get in touch with me, dump the 'jboes' and substitute 'mur'.) ________ Jeffery Boes <>< jboes@qtm.net