Ir para o conteúdo
op_h2tuga

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

Mensagens Recomendadas

op_h2tuga

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ZexAlex

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.