RE: Oracle BLOBs with Common SQL
Hi,
first of all, thanks for your quick responses. I summarize
comment on them below.
> > I can also insert some strings into the column:
> >
> > (with-connection *db-conn-spec*
> > (insert-records :into [test]
> > :attributes '(id data)
> > :values '(1 "simple string")))
> >
> > but if the string contains null character (of code 0) then it
> > is truncated :-(
>
> [John DeSoi]
>
> I'm not familiar with Oracle, but in PostgreSQL you need to escape
> non-printables (including nulls) as octal values:
>
> "mystring\\000"
>
> Since inserting strings works as long as you don't have nulls, you
> might want to check the Oracle documentation to see if there is a
> similar convention.
Unfortunately, Oracle is not as clever as PostgreSQL and generally
it doesn't allow escaping (except for single quotes and the SELECT
clause).
> > I get the following error coming from sql::execute-with-sqlbindparameter:
> >
> > CL-USER 46 > (with-connection *db-conn-spec*
> > (insert-records :into [test]
> > :attributes '(id data)
> > :values '(1 v)))
> >
> > Error: Failed to allocate foreign object of size 2147483648 [allocator NIL]
> > 1 (abort) Return to level 0.
> > 2 Return to top loop level 0.
>
> [Dave Fox]
>
> You appear to have passed the symbol v rather than its value.
You are right. But even if it is fixed [ :values (list 1 v) ]
I get the same error message. It seems that the only data type
allowed for values corresponding to BLOBs is string.
> But anyway, CLOB/BLOB types are not supported in Common SQL. The SQL
> types that we support directly for Oracle are CHAR, VARCHAR2, NUMBER,
> LONG, ROWID and DATE.
Yes, I know that, but for our applications we need BLOBs and,
to tell the truth, I prefer to invest some time to try to find
a way of using BLOBs with Common SQL rather than spend it on
boring J2EE-based development.
> In general it is helpful if, when you think you have found a bug, you
> supply a bug report including the stack backtrace. Instructions are at
> http://www.lispworks.com/support/bug-report.html.
Actually, I don't think that the behavior with arrays described above
is a bug. I simply used an unsupported data type (and its conversion)
and I failed. But I hope that it might be possible to "unofficially"
fix sql::execute-with-sqlbindparameter, so that it accepts data types
other than string and sends it through ODBC to Oracle, which will
take responsability for possible errors.
> > And that's all I can get. Do you have any further ideas / experiences with
> > registration of BLOB?
>
> Other users (not on this list) did try using the Oracle LONG type to
> access CLOB data. I don't actually know whether they were successful.
CLOBs work without problems in my case (after upgrade to the newest
Oracle 9i ODBC driver).
Anyway, I will try further and inform you if I succeed.
Best regards,
Jaroslaw Tomczak