sam.surf 0 Denunciar post Postado Fevereiro 15, 2005 Bom é o seguinte ...tenho uma aplicação em php que utiliza uma procedure oracle, so que essa procedure me retorna dados , mais nao consigo capturar pelo php jogo uma variavel para receber a resposta e nao vem , da erro, segue abaixo a procedure: $sql="Begin prc_ALTERA_SITUACAO('$_SESSION[cod_curso]', '$_SESSION[cod_periodo]', '$vl_media_f', '$_SESSION[qtd_horas]', '$_SESSION[val_aprovacao]', '$_SESSION[val_aprov_exame]', nvl($qtd_faltas,0) , null, $_SESSION[tpo_avaliacao1], '$ind_confirma_b1', '$ind_confirma_b2', null, '$dat_fim', <==== RECEBO DADOS '$sta_conceito_final', <==== RECEBO DADOS '$ind_aprovacao', <==== RECEBO DADOS '$v_erro'); end;"; <==== RECEBO DADOS $exec_sql = ora_open($conn); ora_parse($exec_sql, $sql); ora_exec($exec_sql); Abaixo a msg de erro que dá ... Warning: Ora_Parse failed (ORA-06550: line 1, column 33: PLS-00103: Encountered the symbol "" when expecting one of the following: ( - + mod not null others avg count current exists max min prior sql stddev sum variance cast -- while processing OCI function OPARSE) in c:\arquivos de programas\apache group\apache\htdocs\webw9010ok.php on line 149 Aguardo ajuda .... Compartilhar este post Link para o post Compartilhar em outros sites
cassão 0 Denunciar post Postado Fevereiro 16, 2005 Olha só, eu uso um esquema meio diferente para passar e receber parametros para procedures: PHP [/tr][tr]function insCidade($insEstado, $insCidade) { $db_conn = ocilogon($_SESSION['lg'], $_SESSION['pw'], $_SESSION['db']); $s = OCIParse($db_conn, "BEGIN DOAR.SP_CIDADE_INSERE(:insEstado, :insCidade, :erro); END;"); OCIBindByName($s, ":insEstado", $insEstado); OCIBindByName($s, ":insCidade", $insCidade); OCIBindByName($s, ":erro", $erro, 7); // 7 é o tamanho do retorno $r = OCIExecute($s, OCI_DEFAULT); $val = ($erro != 0) ? $erro : 0 ; return $val; ocilogoff($db_conn); } [/tr] Ou seja, passo $insEstado e $insCidade para a procedure e recebo $erro como retorno da procedure. Em caso de erro vem o número do erro, se não, vem 0 indicando q não há erros. Entendeu? Outra coisa, vi você usando $_SESSION[cod_periodo]. Está certo isso? Não seria $_SESSION['cod_periodo'] ? []s, Cassão Compartilhar este post Link para o post Compartilhar em outros sites
sam.surf 0 Denunciar post Postado Fevereiro 16, 2005 A função ora_bind seria referente ao ocibindbyname ??????? Compartilhar este post Link para o post Compartilhar em outros sites
sam.surf 0 Denunciar post Postado Fevereiro 16, 2005 Outra coisa qual a diferença entre se usar os ORAs e os OCIs ambos nao sao voltatdo para ORACLE ?????? Compartilhar este post Link para o post Compartilhar em outros sites
cassão 0 Denunciar post Postado Fevereiro 16, 2005 A função ora_bind seria referente ao ocibindbyname ??????? ora_bind: Essa função passa variáveis nomeadas do PHP com um parâmetro SQL. O parâmetro SQL deve ser no formato ":name". Com o parâmetro type opcional, você pode definir se o parâmetro SQL são in/out (0, default), in (1) ou out (2). http://br.php.net/manual/pt_BR/function.ora-bind.php ocibindbyname: Passa uma variável PHP variable para um ambiente de armazenamento no Oracle ph_name. Se isso for usado para entrada ou saída de dados irá ser determinado "run-time", e o espaço necessário para armazenagem será alocado. O parâmetro length seta o comprimento máximo para passar. Se você setar length como -1 ocibindbyname() irá usar o comprimento atual da variable para setar o comprimento máximo. http://br.php.net/manual/pt_BR/function.ocibindbyname.php A ocibindbyname seria, digamos, um avanço da ora_bind. Compartilhar este post Link para o post Compartilhar em outros sites
cassão 0 Denunciar post Postado Fevereiro 16, 2005 Outra coisa qual a diferença entre se usar os ORAs e os OCIs ambos nao sao voltatdo para ORACLE ?????? Copiando do site php.net: Sobre OCI8: Essas funções permitem que você acesse Banco de Dados Oracle8 and Oracle7. Elas usam uma interface de comunicação para Oracle8 chamada (OCI8) Essa extensão é mais flexível do que a extensão standard Oracle. Ela tem suporte para passar variáveis PHP locais e globais para o "Oracle placeholders", tem suporte completo à LOB, FILE e ROWID e permite que você use variáveis definidas pelo usuário. Poderíamos dizer que é uma biblioteca para Oracle melhorada. E funciona que é uma beleza. :) Compartilhar este post Link para o post Compartilhar em outros sites
cassão 0 Denunciar post Postado Fevereiro 16, 2005 Teu code ficaria mais ou menos assim(fiz rápido, não verifiquei se existem erros): PHP [/tr][tr]$sql = OCIParse($db_conn, "BEGIN prc_ALTERA_SITUACAO(:cod_curso, :cod_periodo, :vl_media_f, :qtd_horas, :val_aprovacao, :val_aprov_exame, :qtd_faltas, :var_null, :tpo_avaliacao1, :ind_confirma_b1, :ind_confirma_b2, :var_null2, :dat_fim, :sta_conceito_final, :ind_aprovacao, :v_erro); END;"); OCIBindByName($sql, ":cod_curso", $_SESSION['cod_curso']); OCIBindByName($sql, ":cod_periodo", $_SESSION['cod_periodo']); OCIBindByName($sql, ":vl_media_f", $vl_media_f); OCIBindByName($sql, ":qtd_horas", $_SESSION['qtd_horas']); OCIBindByName($sql, ":val_aprovacao", $_SESSION['val_aprovacao']); OCIBindByName($sql, ":val_aprov_exame", $_SESSION['val_aprov_exame']); OCIBindByName($sql, ":qtd_faltas", nvl($qtd_faltas,0)); OCIBindByName($sql, ":var_null", $null); OCIBindByName($sql, ":tpo_avaliacao1", $_SESSION['tpo_avaliacao1']); OCIBindByName($sql, ":ind_confirma_b1", $ind_confirma_b1); OCIBindByName($sql, ":ind_confirma_b2", $ind_confirma_b2); OCIBindByName($sql, ":var_null2", $null); OCIBindByName($sql, ":dat_fim", $dat_fim); OCIBindByName($sql, ":sta_conceito_final", $sta_conceito_final); OCIBindByName($sql, ":ind_aprovacao", $ind_aprovacao); OCIBindByName($sql, ":v_erro", $v_erro, 7); $r = OCIExecute($sql, OCI_DEFAULT);[/tr] []s, Cassão Compartilhar este post Link para o post Compartilhar em outros sites
sam.surf 0 Denunciar post Postado Fevereiro 17, 2005 cara ja consegui fazer usando ORA .... valeu mesmo ... o estranho é que na documentação o OCI diz ser para Oracle 7 e 8 aqui usamos 9 e 10G sem problemas .... o codigo ficou assim : $sql="declare dat_fim date; sta_conceito_final varchar2(2); ind_aprovacao varchar2(2); v_erro varchar2(2); begin prc_ALTERA_SITUACAO('$_SESSION[cod_curso]',$_SESSION[cod_periodo],replace('$vl_media_f','.',','),$_SESSION[qtd_horas],$_SESSION[val_aprovacao],$_SESSION[val_aprov_exame],nvl($qtd_faltas,0),null,$_SESSION[tpo_avaliacao1],'$ind_confirma_b1','$ind_confirma_b2',null,dat_fim,sta_conceito_final,ind_aprovacao,v_erro); :dat_fim := dat_fim; :sta_conceito_final := sta_conceito_final; :ind_aprovacao := ind_aprovacao; :v_erro := v_erro; end;"; $exec_sql = ora_open($conn); ora_parse($exec_sql, $sql, 0) or die('<center>Problemas com o Select Oracle !</center>'); $r1=ora_bind($exec_sql,"dat_fim",":dat_fim",10,0); $dat_fim = NULL; $r2=ora_bind($exec_sql,"sta_conceito_final",":sta_conceito_final",2,0); $sta_conceito_final = NULL; $r3=ora_bind($exec_sql,"ind_aprovacao",":ind_aprovacao",2,0); $ind_aprovacao = NULL; $r4=ora_bind($exec_sql,"v_erro",":v_erro",2,0); $v_erro = NULL; ora_exec($exec_sql); Compartilhar este post Link para o post Compartilhar em outros sites
cassão 0 Denunciar post Postado Fevereiro 17, 2005 Beleza cara, o importante é que tá funcionando.Mas não deixe de dar uma olhada na OCI, pode ser que precise de algo mais.O pessoal do PHP recomenda usar a OCI no lugar da ORA.[]s,Cassão Compartilhar este post Link para o post Compartilhar em outros sites
flavialieggio 0 Denunciar post Postado Junho 6, 2005 Olá pessoal, Tenho uma dúvida em relação a esse tópico. Nesse exemplo que foi postado pelo cassão: function insCidade($insEstado, $insCidade){$db_conn = ocilogon($_SESSION['lg'], $_SESSION['pw'], $_SESSION['db']);$s = OCIParse($db_conn, "BEGIN DOAR.SP_CIDADE_INSERE(:insEstado, :insCidade, :erro); END;");OCIBindByName($s, ":insEstado", $insEstado);OCIBindByName($s, ":insCidade", $insCidade);OCIBindByName($s, ":erro", $erro, 7); // 7 é o tamanho do retorno$r = OCIExecute($s, OCI_DEFAULT);$val = ($erro != 0) ? $erro : 0;return $val;ocilogoff($db_conn);} Posso usá-lo como inserção de dados no banco??? Não sei se entendi bem, mas estava tentando fazer em cima desse modelo um meio para inserção. Veja o que eu fiz: <?php//procedure de inseção:$conn = OCILogon("usuario","senha","desenv");$curs = OCINewCursor($conn);$stmt = OCIParse($conn,"begin sipesca.pescasp012_inclui_proprietario(:p_nu_proprietario,nome_propi,endereco,CD_MUNICIPIO,null,null,tel,ddd,observacao); end;");OCIBindByName($stmt,":p_nu_proprietario",$nu_proprietario);OCIExecute($stmt,OCI_DEFAULT);while(OCIFetchInto($curs,$data,OCI_RETURN_NULLS|OCI_ASSOC)){...}OCIFreeStatement($stmt);//OCIFreeCursor($curs);OCILogoff($conn); Ta correto? Se voces puderem me orientar agradeço muito!!! Abraços, Flávia Compartilhar este post Link para o post Compartilhar em outros sites