A CallableStatement was excecuted with an invalid number of parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When I'm trying to call a postgres function inside java application, i got this exception:

A CallableStatement was excecuted with an invalid number of parameters
I'm using postgresql-driver-8.3-607 and jdk1.7

Here's the postgres function:

CREATE OR REPLACE FUNCTION tmp_insert (text) RETURNS SETOF restype AS 'DECLARE
       adrs restype%rowtype;
       adrs_id bigint;
       mess_id record;
       adress text[];
       adrs_id_array bigint[];
       exp text;
       dest text[];
       sbj text;
       dt timestamp;
       adrs_dest record;
       adrs_id_tmp record;
BEGIN
       adrs_id := id FROM adresses WHERE valeur = $1;
       FOR mess_id IN SELECT message FROM correspondants WHERE adresse = adrs_id
       LOOP
           adrs.exp := adresses.valeur FROM adresses WHERE adresses.id = 
           (SELECT adresse FROM correspondants WHERE message = mess_id.message AND type = 1);
           adrs.sujet := valeur FROM contenu WHERE message = mess_id.message AND type = 1;
           adrs.date := m_date FROM messages WHERE id = mess_id.message;
           FOR adrs_id_tmp IN SELECT adresse FROM correspondants WHERE message = mess_id.message AND type = 2
           LOOP
               FOR adrs_dest IN SELECT adresses.valeur FROM adresses WHERE adresses.id = adrs_id_tmp.adresse
               LOOP
                   adrs.dest := adrs_dest.valeur;                   
                   RETURN NEXT adrs;
               END LOOP;    
            END LOOP;            
       END LOOP;
       
END;' LANGUAGE "plpgsql"
 
and restype is  CREATE TYPE restype AS (exp text, dest text, sujet text, date timestamp)

 My calling java application is as following:

        con = DriverManager.getConnection("jdbc:postgresql://" + host + "/" + database,
                username, password);
        stmt = con.createStatement();  
        con.setAutoCommit(false);
        CallableStatement cs = con.prepareCall("{ ? = call tmp_insert(?) }");   
        cs.registerOutParameter(1, Types.OTHER);       
        cs.setString(2, "lool@xxxxxxxx");   
        try {
            cs.execute();
            System.out.println(cs.getObject(1));
        } catch (PSQLException psqlex) {
            psqlex.printStackTrace();
        }

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux