One I've not release yet. You may need to make the changes by hand.

Tim.

On Wed, Oct 23, 2002 at 06:53:37AM -0400, Steve Sapovits wrote:
> 
> Tim - what version of DBD::Oracle are you starting with?  Thanks ...
> 
> Tim Bunce wrote:
> >On Tue, Oct 22, 2002 at 08:37:34PM -0400, Steve Sapovits wrote:
> >
> >>Looks like an Oracle error, which is what I'd expect.  I'm just
> >>wondering if Oracle is supposed to support this or not ...
> >>
> >>Here's the trace output (sorry for any wrapping):
> >
> >
> >>   -> prepare for DBD::Oracle::db (DBI::db=HASH(0x335a78)~0x26b9ac 
> >>   'CREATE TABLE foo2 AS SELECT * FROM foo W
> >>HERE col_2 = ?')
> >>   New DBI::st (for DBD::Oracle::st, parent=DBI::db=HASH(0x26b9ac), id=)
> >>   dbih_setup_handle(DBI::st=HASH(0x26ba60)=>DBI::st=HASH(0x277a00), 
> >>DBD::Oracle::st, 33b398, Null!)
> >>   dbih_make_com(DBI::db=HASH(0x26b9ac), DBD::Oracle::st, 208) thr#0
> >>   dbd_preparse scanned 1 distinct placeholders
> >>   dbd_st_prepare'd sql CREATE
> >>   dbd_describe skipped for CREATE
> >>   <- prepare= DBI::st=HASH(0x26ba60) at cbindt line 13
> >
> >
> >I suspect the problem is summed up by the "dbd_describe skipped for 
> >CREATE" line.
> >
> >
> >>   -> execute for DBD::Oracle::st (DBI::st=HASH(0x26ba60)~0x277a00 1)
> >>      bind :p1 <== 1 (type 0)
> >>      bind :p1 <== 1 (size 1/2/0, ptype 5, otype 1)
> >>      bind :p1 <== '1' (size 1/1, otype 1, indp 0, at_exec 1)
> >>   !! ERROR: 1036 'ORA-01036: illegal variable name/number (DBD ERROR: 
> >>   OCIBindByName)'
> >>   <- execute= undef at cbindt line 16
> >
> >
> >Try this (experimental and untested) patch:
> >
> >--- oci8.c.prev Wed Oct 23 09:19:25 2002
> >+++ oci8.c      Wed Oct 23 09:22:58 2002
> >@@ -817,7 +817,7 @@
> >     if (long_readlen < 0)              /* trap any sillyness */
> >        long_readlen = 80;              /* typical oracle app default   */
> > 
> >-    if (imp_sth->stmt_type != OCI_STMT_SELECT) {
> >+    if (0 && imp_sth->stmt_type != OCI_STMT_SELECT) { /* XXX DISABLED, 
> >see num_fields test below */
> >        if (DBIS->debug >= 3)
> >            PerlIO_printf(DBILOGFP, "    dbd_describe skipped for %s\n",
> >                oci_stmt_type_name(imp_sth->stmt_type));
> >@@ -847,6 +847,14 @@
> >        oci_error(h, imp_sth->errhp, status, "OCIAttrGet 
> >        OCI_ATTR_PARAM_COUNT");
> >        return 0;
> >     }
> >+    if (num_fields == 0) {
> >+       if (DBIS->debug >= 3)
> >+           PerlIO_printf(DBILOGFP, "    dbd_describe skipped for %s (no 
> >fields returned)\n",
> >+               oci_stmt_type_name(imp_sth->stmt_type));
> >+       /* imp_sth memory was cleared when created so no setup required 
> >here    */
> >+       return 1;
> >+    }
> >+
> >     DBIc_NUM_FIELDS(imp_sth) = num_fields;
> >     Newz(42, imp_sth->fbh, num_fields, imp_fbh_t);
> >
> >But this change may cause some other issues (such as DDL statement
> >getting executed during prepare()) so test carefully.
> >
> >Tim.
> 
> 
> -- 
> Steve Sapovits    GSI Commerce, Inc.    http://www.gsicommerce.com
> Email:   [EMAIL PROTECTED]
> Work:    610-491-7087
> Mobile:  610-574-7706
> Pager:   877-239-4017
> 

Reply via email to