Why don't you try to debug this stuff in SQL*Plus before you go to DBI.
Issue 1 isn't really a DBI issue - it's an SQL issue.

Instead of "LIMIT 1" try adding "and rownum  <= 1" to the where clause.

For the issue 2 - I'm not sure but it might be worth checking there are no
non-visible characters in the statement. I would also suggest you start
formatting these things for readability: e.g.

my $measurementssth2=$dbh->prepare("
    SELECT  TYPE, SPORES
    FROM $measurements_table
    WHERE (
                     POLLENTRAP_ID = ?
        AND    ALLER_ID              = ?
        AND    ( TO_CHAR(SYSDATE,'IW')=  TO_CHAR(DATECOLLECTION,'IW') )
    )
");

Although I fear some of this formatting may get a little distorted by email.

Most of the brackets are redundant although not illegal so you could do:
my $measurementssth2=$dbh->prepare("
    SELECT  TYPE, SPORES
    FROM $measurements_table
    WHERE
                     POLLENTRAP_ID = ?
        AND    ALLER_ID              = ?
        AND    TO_CHAR(SYSDATE,'IW')=  TO_CHAR(DATECOLLECTION,'IW')
");

and see if it makes any difference.

Regards
Chris
----- Original Message ----- 
From: "spiros" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, February 26, 2004 6:41 PM
Subject: Two simple Oracle DBI issues(Oracle NEWBIE)


> Two problems:
> First, I tried:
> my $measurementssth=$dbh->prepare("SELECT POLLENTRAP_ID, ALLER_ID, TYPE,
> SPORES,FID, (SYSDATE-DATECOLLECTION)  FROM $measurements_table WHERE
>  (SYSDATE-DATECOLLECTION) <15 ORDER by  6  LIMIT 1 ") ;
>
> (trying to get the one line of data for which DATECOLLECTION IS closest to
> SYSDATE PROVIDED these are no older than 14days, else I shoul get NULL)
>
> and got:
> DBD::Oracle::db prepare failed: ORA-00933: SQL command not properly ended
(DBD
> ERROR: error possibly near <*> indicator at char 154 in 'SELECT
> POLLENTRAP_ID, ALLER_ID, TYPE,
> SPORES,FID, (SYSDATE-DATECOLLECTION)  FROM mysc.MEASUREMENTS WHERE
>  (SYSDATE-DATECOLLECTION) <15 ORDER by  6  <*>LIMIT 1 ') [for Statement
> "SELECT POLLENTRAP_ID, ALLER_ID, TYPE,
> SPORES,FID, (SYSDATE-DATECOLLECTION)  FROM mysc.MEASUREMENTS WHERE
>  (SYSDATE-DATECOLLECTION) <15 ORDER by  6  LIMIT 1 "] at alarmchk.pl line
176.
>
> IT looks like it does not like LIMIT. Is this not legal in Oracle? Surely
> there must be a way to do this
>
> **** SECOND PROBLEM ***
> Another statement that fails is when I try to bind params
>
> my $measurementssth2=$dbh->prepare("SELECT  TYPE,
> SPORES FROM $measurements_table WHERE (POLLENTRAP_ID = ? AND ALLER_ID=?
AND
> ( TO_CHAR(SYSDATE,'IW')=
>  TO_CHAR(DATECOLLECTION,'IW') )     )            ");
>
> and got:
> DBD::Oracle::db prepare failed: ORA-00907: missing right parenthesis (DBD
> ERROR: error possibly near <*> indicator at char 70 in 'SELECT  TYPE,
> SPORES FROM mysc.MEASUREMENTS WHERE  ( POLLENTRAP_ID<*>=:p1 AND FID=:p2
AND
> ( TO_CHAR(SYSDATE,'IW')=
>  TO_CHAR(DATECOLLECTION,'IW') )                 ') [for Statement "SELECT
> TYPE,SPORES FROM mysc.MEASUREMENTS WHERE  ( POLLENTRAP_ID=? AND FID=? AND
> ( TO_CHAR(SYSDATE,'IW')=
>  TO_CHAR(DATECOLLECTION,'IW') )                 "] at alarmchk.pl line
180.
>
>
> Again, is there something I am missing about bind params in Oracle?
>
>
>

Reply via email to