It looks like there's some confusion over SQL syntax here. Is there a
database which allows you to effect an insert into a table by doing a
'select ... into ' ?

Oracle certainly doesn't and if Peter's using Oracle then what he suggests
should (and does) work fine. Having said that TIMTOWTDI :) ...

Looking at the plsql.t test with the DBD::Oracle distribution (lines 234...)
this shows how a cursor can be used to fetch data. This seems like the
neatest option to me and will possible prove the most optimal in various
situations. How portable it is to other databases I can't say.

Regards,
Tim

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, May 23, 2001 3:26 PM
Subject: AW: AW: (not) Too stupid to bind a variable... :-)



What Steve says is exactly what I want, and the code

my $sth = $dbh->prepare(q{
    BEGIN select vtr_id into :1 from t_vertraege
      where vtr_nr='$vbb_ver_nr';
    END;
  });

works very well...

-----Ursprüngliche Nachricht-----
Von: Steve Sapovits [mailto:[EMAIL PROTECTED]]
Gesendet am: Mittwoch, 23. Mai 2001 16:17
An: Bart Lateur; [EMAIL PROTECTED]
Betreff: RE: AW: (not) Too stupid to bind a variable... :-)


I think he's trying to use it as a PL/SQL variable -- not
a table name.  As in this block of PL/SQL code in the
DBD::Oracle docs:

      FUNCTION func_np
        RETURN VARCHAR2
      IS
        ret_val VARCHAR2(20);
      BEGIN
        SELECT USER INTO ret_val FROM DUAL;
        RETURN ret_val;
      END;

In this case the PL/SQL code is selecting from a table into
a variable.

The stuff below looks like an attempt to create on the fly
PL/SQL.  I've never seen that done.



> -----Original Message-----
> From: Bart Lateur [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, May 23, 2001 10:13 AM
> To: [EMAIL PROTECTED]
> Subject: Re: AW: (not) Too stupid to bind a variable... :-)
>
>
> On Wed, 23 May 2001 16:02:00 +0200, [EMAIL PROTECTED] wrote:
>
> >What I wanted is:
> >
> >  my $sth = $dbh->prepare(q{
> >    BEGIN select vtr_id into :1 from t_vertraege
> >      where vtr_nr='$vbb_ver_nr';
> >    END;
> >  });
>
> You may turn this around as much as you like, but you're
> still trying to
> do something for which placeholders were never intended. You
> want to use
> a placeholder for a table name. Placeholders were only intended to
> reference field (=column) values. Don't be surprised if anything
else
> doesn't work: no field names, no table names. That's not what
> it's for.
> Only field values.
>
> --
> Bart.
>


Reply via email to