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.
– Daniel Omine
More comes to insert correctly via PHP or even inserts?
– Jhonatan Simões
Hello! Does not insert. The extension is installed and working correctly. Neither with Insert ... works.
– Fernando Silva