op_h2tuga Posted December 20, 2012 at 10:20 PM Report #488002 Posted December 20, 2012 at 10:20 PM Boas, Estou a tentar chamar um função que tenho no sql developer, cuja função está dentro de um package o código php é este: include("bd.class.php"); $baseDados = new BD(); $baseDados->ligarBD(); $liga = $baseDados->ligarBD(); $num = 2; $stmt = $baseDados->executaSQL("begin :n := per.PERGUNTA_UM(:num); end;"); if (!$stmt) { $oerr = OCIError($stmt); echo "erro:"; exit; } //atribui valor das variaveis a "res" // --> o valor de n (saido da funcao se; ok) // ou --> -1 em caso de erro ocibindbyname($stmt,":n",$res,64); //executa a funcao ociexecute($stmt); //imprime o valor de saida da funcao echo "\n\n\n\tRESULTADO: $res"; //liberta o valor de $smtt OCIFreeStatement($stmt); OCICommit($login); //faz o logoff da BD OCILogoff($login); o código que está no sql developer é este: create or replace package BODY per AS function PERGUNTA_UM(v_id_cliente in encomenda.id_cliente%TYPE) return varchar2 is v_nome_cliente varchar2(50); encs encomenda%rowtype; Cursor encomendas is Select * from encomenda where id_cliente = v_id_cliente; v_id_encomenda number(20); v_descricao varchar2(50); v_estado varchar2(50); v_tipo_encomenda varchar2(50); v_localizacao varchar2(50); v_id_produto number(20); v_data_enc date; v_nome varchar(50); v_quantidade number(20); v_preco_unitario number(20); v_total number(20); n number(20); numr number(20); v_string varchar2(300); begin select nome into v_nome_cliente from cliente where id_cliente=v_id_cliente; --open encomendas; for encs in encomendas loop -- fetch encomendas into encs; select id_produto, data_enc, quantidade into v_id_produto, v_data_enc, v_quantidade from encomendaproduto where id_encomenda = encs.id_encomenda AND rownum = 1; select nome, preco_unitario into v_nome, v_preco_unitario from produto where id_produto= v_id_produto; v_total:= v_quantidade * v_preco_unitario; n := n+1; v_string := 'CLIENTE ID: ' || v_id_cliente || 'NOME DO CLIENTE: ' || v_nome_cliente || 'Nº ENCOMENDA: ' || encs.id_encomenda || 'DATA DE ENCOMENDA: ' || v_data_enc || 'NOME: ' || encs.descricao || 'ESTADO:' || encs.estado || 'PRODUTO ID:' || v_id_produto || 'NOME:' || v_nome || 'QUANTIDADE:' || v_quantidade || 'PREÇO UNITÁRIO:' || v_preco_unitario; end loop; return v_string; --close encomendas; EXCEPTION WHEN NO_DATA_FOUND THEN v_string := 'CLIENTE NÃO EXISTE'; return v_string; end; end PER; O que se passa é que não mostra nada no php, não dá nenhum erro, a função funciona no sql developer, alguém sabe o que pode ser? Cumprimentos
ZexAlex Posted May 8, 2013 at 06:14 PM Report #506305 Posted May 8, 2013 at 06:14 PM Sugiro que primeiro despistes se estás efectivamente a chamar a função a partir do PHP e se os "binds" estão a funcionar (alterando-a para inserir uma row de teste com os valores de entrada e saida numa tabela de teste, por exemplo). Não esquecer de colocar um commit para depois poderes consultar o resultado numa sessão diferente. Uma vez isto despistado, trata-se de investigar PHP para perceber porque é o que o "ocibindbyname" não está a resultar.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now