Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Inserting LONG RAW through ODBC on Oracle 8 causes "Function sequence error"

Re: Inserting LONG RAW through ODBC on Oracle 8 causes "Function sequence error"

From: Yuri Yusupov <SPAM>
Date: Wed, 24 Mar 1999 10:53:30 +0300
Message-ID: <7da5m9$87d$1@storm.comstar.ru>


Hi !
IMHO, the right sequence is
SQLPrepare, SQLBindParameter, SQLExecute.

I tried it next way and It works with 32bit and for 16 bit it gives [Oracle][ODBC Oracle Driver] [Oracle OCI]ORA-01480: trailing null missing from STR bind value
ODBC State = S1000, Native Error =1480

It happens when I try to put more then ~64K info into LONGVARCHAR Oracle7.3 DB through 16bit ODBC.
Oracle ODBC16bit driver 7.3

   sprintf( qstr,"Update PAGE_INSTANCE set PAGE_STRUCT = ? where SYSTEM_ID = %ld", sysid );

   rc = SQLPrepare( hstmt,(UCHAR*)qstr,SQL_NTS ); ..

   cb_ps = SQL_DATA_AT_EXEC; //
   rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR,
SQL_LEN_DATA_AT_EXEC(0), 0, (void*)4, 0, &cb_ps); ..

   rc = SQLExecute(hstmt);

   PTR pToken;
   while (rc == SQL_NEED_DATA) {

      rc = SQLParamData(hstmt, &pToken);

      if (rc == SQL_NEED_DATA) {
         for (int i= 0 ; i< repeat; i++) {
            RETCODE r = SQLPutData( hstmt, page_struct, len );
            if ( RETCODE_IS_FAILURE( r )) {
               rc = r;
               break;
            }
         }
      }

   }
..

   SQLFreeStmt( hstmt,SQL_DROP );

txm wrote in message <36f8673e$0$216_at_nntp1.ba.best.com>...
>Hi all
>
>I'm trying to insert long raw and having problems. Since Oracle's ODBC
>driver's SQLPutData supports only up to 32k (per chunk), I need to repeat
>SQLPutData. My codes are like:
>
>-----------------------------------------
>#define buflen 70000
>#define sendlen 10000
>
> char* insertStmt = "INSERT INTO blobtest (first) VALUES (?)";
>
> SQLINTEGER copied = SQL_LEN_DATA_AT_EXEC(buflen - 1);
>
> ret = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,
>SQL_LONGVARBINARY, buflen, 0, (SQLPOINTER) 2, buflen - 1, &copied);
> ret = SQLExecDirect(hstmt, (PUCHAR)insertStmt, SQL_NTS);
> SQLPOINTER pToken;
>
> SQLPOINTER next = longraw;
>
> if (ret == SQL_NEED_DATA)
> {
> ret = SQLParamData(hstmt, &pToken);
> for (int i = 0; i < buflen/sendlen; i++)
> {
> ret = SQLPutData(hstmt, next, sendlen);
> next = (SQLPOINTER) ((DWORD) next + sendlen);
> }
> }
>
> ret = SQLEndTran(SQL_HANDLE_DBC , hdbc, SQL_COMMIT);
> ----------------------------------------------
>
>When I commit, it gets "Function sequence error". SQLParamData works only
>once. If I call SQLParamData more than once as ODBC manual says, it gets
>"Function sequence error", too.
>
>I'm stuck now. Does anybody have any idea?
>
>Thank you.
>
>
>
>
>
Received on Wed Mar 24 1999 - 01:53:30 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US