Bravanet 0 Denunciar post Postado Dezembro 21, 2006 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
walace 1 Denunciar post Postado Dezembro 21, 2006 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
Bravanet 0 Denunciar post Postado Dezembro 21, 2006 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
walace 1 Denunciar post Postado Dezembro 21, 2006 Opa, tira o commit e coloca depois disto.você dando commit ele encerra a sessão aberta, tenta isso e manda novamente aí pra gente ver o que dá. Compartilhar este post Link para o post Compartilhar em outros sites
Bravanet 0 Denunciar post Postado Dezembro 21, 2006 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
walace 1 Denunciar post Postado Dezembro 21, 2006 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
Bravanet 0 Denunciar post Postado Dezembro 21, 2006 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