Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bravanet

PHP + Oracle

Recommended Posts

Pessoal, bom dia!Estou tendo o seguinte problema ao usar o oracle com php, vou explicar por partes:- Insiro os dados no banco, ok... perfeito!- Preciso agora pegar o ID(ID é um coluna, ela funciona com uma sequence) desta linha que eu inseri para poder insera-la em outra tabela.No mysql eu utilizava a função Last_Insert_Id, agora no oracle eu não estou conseguindo... alguém ja precisou disso, sabe como faz ou que possa dar o caminho das pedras?Obrigado,Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagine que teu sequence se chama "sequencia", após teu insert execute o seguinte:

SELECT sequencia.currval FROM dual;

Será retornado o valor do ultimo, você precisa fazer isso antes de encerrar a sessão oracle. Algumas pessoas pensam em utilizar o nextval, mas daí vai acabar incrementando mais uma vez tua sequencia.

 

Qualquer dúvida posta novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Walace, obrigado pela resposta... executei a dica mais deu um erro:

 

Warning: ociexecute() [function.ociexecute]: ORA-08002: a seqüência APP_COORDINATE_SEQ.CURRVAL ainda não foi definido nesta sessão in C:\www\php\sistemas\BBL\rturegister.php on line 21

 

Segue abaixo o código... a linha 21 especificada no erro eu coloquei em negrito...

 

 

if(!empty($_POST['rtu']) && !empty($_POST['XX']) && !empty($_POST['YY'])){	 	 $sql = "INSERT INTO APP_COORDINATE (TITLE,X,Y,DATE_START)VALUES('".$_POST['rtu']."',".$_POST['XX'].",".$_POST['YY'].",current_date)";	 $sql = ociparse($ora_conecta,$sql) or die("ERRO NA ANÁLISE DA CLÁUSULA SQL");	 ociexecute($sql,OCI_DEFAULT);	 OCICommit($ora_conecta);	 	 $queryID = "SELECT APP_COORDINATE_SEQ.currval FROM dual";	 $queryID = ociparse($ora_conecta,$queryID) or die("ERRO NA ANÁLISE DA CLÁUSULA SQL");	 [b]ociexecute($queryID,OCI_DEFAULT);[/b]	 ocifetch($queryID);	 	 $RID = ociresult($sql,"currval");	 echo $RID;}

Você sabe o que pode ser?

 

Obrigado,

 

Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagine que teu sequence se chama "sequencia", após teu insert execute o seguinte:

SELECT sequencia.currval FROM dual;
...você precisa fazer isso antes de encerrar a sessão oracle.Qualquer dúvida posta novamente.
Como eu faço para executar antes de encerrar a sessão do oracle? Desculpe as perguntas... é que sou novato em oracle.Obrigado,Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, então, antes do commit dou de fechar tua conexão.

Olha um exemplo:

$objConexao = new ConexaoBancoDados(DB_USUARIO, DB_SENHA, DB_HOST,DB_SERVER);			$objLancamentoDao	= new LancamentoDAO();			$objRequisiDao		= new RequisiDAO();			$sql		= "INSERT INTO controle (seq_controle) VALUES (seq_controle.nextval) ";			$stmt		= oci_parse($conn, $sql);			$exec		= @oci_execute($stmt, OCI_DEFAULT);			if ($exec)			{				$sql	= "SELECT seq_controle.currval AS seq_controle FROM dual";				$stmt	= oci_parse($conn, $sql);				$exec	= @oci_execute($stmt, OCI_DEFAULT);				ocifetchstatement($stmt, $rs);				$objEmpenho->setSeq_controle($rs['SEQ_CONTROLE'][0]);						oci_commit($conn);			}

Note que abro a conexão, dou um insert com oci_default, recupero o sequencial pelo currval e só daí dou o commit.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado!!Coloquei o commit após executar o select e funcionou ferfeitamente. Obrigado mesmo!Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.