PHP and Oracle error - oci_execute

Asked

Viewed 419 times

0

I have a packcage with the following SP:

procedure sp_WEB_PECAS_OBJTV_LOJA(  pPECAS_OBJTV_LOJA_ID  in   WEB_PECAS_OBJTV_LOJA.PECAS_OBJTV_LOJA_ID%type,
                                pPECAS_OBJTV_LOJA_COD_EMP         in WEB_PECAS_OBJTV_LOJA.PECAS_OBJTV_LOJA_COD_EMP%type,
                                pPECAS_OBJTV_LOJA_DIAS_UTEIS      in WEB_PECAS_OBJTV_LOJA.PECAS_OBJTV_LOJA_DIAS_UTEIS%type, 
                                pPECAS_OBJTV_LOJA_OBJTV           in WEB_PECAS_OBJTV_LOJA.PECAS_OBJTV_LOJA_OBJTV%type,
                                pPECAS_OBJTV_LOJA_MES             in WEB_PECAS_OBJTV_LOJA.PECAS_OBJTV_LOJA_MES%type,
                                pMSG                              out varchar2) is

 vVERIFICA_DUPLICATA_OBJETIVO number := 0;
 vOBJETIVO_LOJA                        number := 0;
 vOBJETIVO                           number := 0;
 vOBJETIVOID                         number := 0;
 vWEB_PECAS_OBJTV_LOJA         number := 0;
 vSEQUEN                      number := 0;

BEGIN

-- Verifica se não existe um objetivo cadastrado para a loja no mes e ano informados
SELECT COUNT(PECAS_OBJTV_LOJA_COD_EMP) INTO vVERIFICA_DUPLICATA_OBJETIVO
FROM WEB_PECAS_OBJTV_LOJA
WHERE PECAS_OBJTV_LOJA_COD_EMP = pPECAS_OBJTV_LOJA_COD_EMP
AND PECAS_OBJTV_LOJA_MES = TO_DATE(pPECAS_OBJTV_LOJA_MES,'dd/mm/yyyy hh24:mi')
AND ROWNUM <=1;

-- Se existe objetivo já cadastrado 
IF vVERIFICA_DUPLICATA_OBJETIVO != 0 THEN

     SELECT * INTO vOBJETIVO_LOJA
      FROM (SELECT COUNT(PECAS_OBJTV_LOJA_ID) FROM WEB_PECAS_OBJTV_LOJA
            WHERE  
                   PECAS_OBJTV_LOJA_ID = pPECAS_OBJTV_LOJA_ID  
                             AND PECAS_OBJTV_LOJA_COD_EMP = pPECAS_OBJTV_LOJA_COD_EMP
                             AND PECAS_OBJTV_LOJA_DIAS_UTEIS = pPECAS_OBJTV_LOJA_DIAS_UTEIS
                             AND PECAS_OBJTV_LOJA_OBJTV = pPECAS_OBJTV_LOJA_OBJTV
                             AND PECAS_OBJTV_LOJA_MES = pPECAS_OBJTV_LOJA_MES
                  )
     WHERE ROWNUM <= 1;
ELSE
    vWEB_PECAS_OBJTV_LOJA := 1;
END IF;     

-- Verifica se todos os dados foram informados
IF(vOBJETIVO_LOJA > 0 OR (pPECAS_OBJTV_LOJA_COD_EMP IS NULL 
   AND pPECAS_OBJTV_LOJA_COD_EMP IS NULL AND pPECAS_OBJTV_LOJA_DIAS_UTEIS IS NULL 
         AND pPECAS_OBJTV_LOJA_OBJTV IS NULL AND pPECAS_OBJTV_LOJA_MES IS NULL))    THEN

    pMSG := 'Dados insuficientes! =/ ';

ELSE
    -- Pesquisa o Objetivo da Loja pelo codigo da loja e mes do objetivo    
    SELECT COUNT(*) INTO vOBJETIVO FROM WEB_PECAS_OBJTV_LOJA WHERE PECAS_OBJTV_LOJA_COD_EMP = pPECAS_OBJTV_LOJA_COD_EMP AND PECAS_OBJTV_LOJA_MES = pPECAS_OBJTV_LOJA_MES;
    -- pesquisa o Objetivo da Loja pelo ID
    SELECT COUNT(*) INTO vOBJETIVOID FROM WEB_PECAS_OBJTV_LOJA WHERE PECAS_OBJTV_LOJA_ID = pPECAS_OBJTV_LOJA_ID;

    --Nao existe nenhum objetivo cadastrado para essa loja nesse mes e nem com o id informado
    if(pPECAS_OBJTV_LOJA_ID IS NULL OR pPECAS_OBJTV_LOJA_ID = 0) THEN
        vWEB_PECAS_OBJTV_LOJA := 0;
    ELSIF (vOBJETIVO > 0) THEN
        vWEB_PECAS_OBJTV_LOJA := 2;
    ELSIF(vOBJETIVOID > 0) THEN
        vWEB_PECAS_OBJTV_LOJA := 3;
    END IF;

    -- Senao existir nenhum objetivo para a empresa e mes informados, vamos salvar os dados no banco de dados
    IF (vWEB_PECAS_OBJTV_LOJA = 0) THEN
        -- Pega a sequence da tabela
        vSEQUEN := SEQ_WEB_PECAS_OBJTV_LOJA.NEXTVAL;

        INSERT INTO WEB_PECAS_OBJTV_LOJA
        (
            PECAS_OBJTV_LOJA_ID,
            PECAS_OBJTV_LOJA_COD_EMP,
            PECAS_OBJTV_LOJA_DIAS_UTEIS,
            PECAS_OBJTV_LOJA_OBJTV,
            PECAS_OBJTV_LOJA_MES 
        ) VALUES (
            vSEQUEN,
            pPECAS_OBJTV_LOJA_COD_EMP,
            pPECAS_OBJTV_LOJA_DIAS_UTEIS,
            pPECAS_OBJTV_LOJA_OBJTV,
            TO_DATE(pPECAS_OBJTV_LOJA_MES,'dd/mm/yyyy hh24:mi')             
        );

        COMMIT;
        pMSG := pPECAS_OBJTV_LOJA_ID;

    -- Se existir o objetivo cadastrado, então vamos editar os dados
    ELSIF (vWEB_PECAS_OBJTV_LOJA > 0) THEN
        UPDATE WEB_PECAS_OBJTV_LOJA
            SET  
                PECAS_OBJTV_LOJA_COD_EMP      = pPECAS_OBJTV_LOJA_COD_EMP,
                PECAS_OBJTV_LOJA_DIAS_UTEIS = pPECAS_OBJTV_LOJA_DIAS_UTEIS,
                PECAS_OBJTV_LOJA_OBJTV        = pPECAS_OBJTV_LOJA_OBJTV,
                PECAS_OBJTV_LOJA_MES            = to_date(pPECAS_OBJTV_LOJA_MES,'dd/mm/yyyy hh24:mi')
            WHERE PECAS_OBJTV_LOJA_ID     = pPECAS_OBJTV_LOJA_ID;

        COMMIT;

         pMSG := 'Objetivo de Loja alterado com sucesso! =)';  

    END IF;

END IF;
END sp_WEB_PECAS_OBJTV_LOJA;

My php code is as follows:

     $sql = "begin
                  pk_web.sp_web_pecas_objtv_loja(ppecas_objtv_loja_id => :ppecas_objtv_loja_id,
                                                 ppecas_objtv_loja_cod_emp => :ppecas_objtv_loja_cod_emp,
                                                 ppecas_objtv_loja_dias_uteis => :ppecas_objtv_loja_dias_uteis,
                                                 ppecas_objtv_loja_objtv => :ppecas_objtv_loja_objtv,
                                                 ppecas_objtv_loja_mes => :ppecas_objtv_loja_mes,
                                                 pmsg => :pmsg);
                  end;";

        $where = array(
            ':ppecas_objtv_loja_cod_emp'        => $vetor['PECAS_OBJTV_LOJA_COD_EMP'],
            ':ppecas_objtv_loja_dias_uteis'     => $vetor['PECAS_OBJTV_LOJA_DIAS_UTEIS'],
            ':ppecas_objtv_loja_objtv'          => $vetor['PECAS_OBJTV_LOJA_OBJTV'],
            ':ppecas_objtv_loja_mes'            => $vetor['PECAS_OBJTV_LOJA_MES']
        );

        /*Common::printPre($vetor);
        Common::printPre($sql);*/
        //exit;
         if($retorno = $this->db->inserirObjetivo($sql,$where)) {
             return $retorno;
         }

Code of the method Insertive

   public function inserirObjetivo($script,$valores = array())
{

    $stmt = oci_parse($this->conn, $script);

    oci_bind_by_name($stmt,':ppecas_objtv_loja_cod_emp'     ,$valores[':ppecas_objtv_loja_cod_emp'],20);
    oci_bind_by_name($stmt,':ppecas_objtv_loja_dias_uteis'  ,$valores[':ppecas_objtv_loja_dias_uteis'],3);
    oci_bind_by_name($stmt,':ppecas_objtv_loja_objtv'       ,$valores[':ppecas_objtv_loja_objtv'],200);
    oci_bind_by_name($stmt,':ppecas_objtv_loja_mes'         ,$valores[':ppecas_objtv_loja_mes'],20);

    oci_bind_by_name($stmt,":pMSG",$msg,1000);

    if(oci_execute($stmt,OCI_COMMIT_ON_SUCCESS)) {
        return $msg;
    } else {
        /*Common::printPre($script);
        echo "<br>";*/
        $erro = oci_error($this->conn);
        oci_free_statement($stmt);
        return $erro['message'];

    }
}

And in executing that damned I have the following mistake:

Warning: oci_execute(): in /var/www/intranet/modulosWeb/peca/objetivo/system/Oracle.php on line 179

Row 179 in the case is the row below in the insert method:

if(oci_execute($stmt,OCI_COMMIT_ON_SUCCESS)) {
        return $msg;
    }

The SP works correctly. I’ve done several tests. I can’t find the error.. since the only message I have of error is this... Unfortunately, I don’t have access to the apache log of that server...

  • The error message seems incomplete. Normally it should display the reason for the error, an oracle error code or something.. But I think it might be due to the lack of the extension. Check if your environment’s PHP is loaded with Oracle.

  • More comes to insert correctly via PHP or even inserts?

  • 1

    Hello! Does not insert. The extension is installed and working correctly. Neither with Insert ... works.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.