Jump to content

[Resolvido] Chamar função(Bloco pl/sql) no PHP


op_h2tuga

Recommended Posts

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

Link to comment
Share on other sites

  • 4 months later...

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.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.