PHP não executa procedure do Oracle

Este forum é destinado a perguntas relacionadas a Oracle, mas que não se enquadram nos forums acima. Aqui serão tratadas também sobre outras tecnologias da oracle, como o Workflow, BPEL, Spatial, OCS, etc.
Responder
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Pessoal, me desculpe se o tópico está no lugar errado, mas estou passando por um problema estranho.

Pessoal, tenho a seguinte procedure no Oracle:

Selecionar tudo

proc_calc(varValor  out varchar2)
Quando eu executou ela pelo SQL Developer funciona corretamente.
Para executar via PHP fiz o seguinte:

Selecionar tudo

$con = oci_connect($user, $pass, $server);

$sql = 'begin proc_calc(:retorno); end;';
$stm = oci_parse($con , $sql);

oci_bind_by_name($stm , ':retorno', $retorno, 32700);

$ex = oci_execute($stm);
Quando executo pelo PHP resulta no seguinte erro:

Selecionar tudo

PHP Warning:  ociexecute() [<a href='function.ociexecute'>function.ociexecute</a>]: ORA-06550: line 1, column 7:
PLS-00201: identifier 'PROC_CALC' must be declared
Aparentemente não encontra ou não dá permissão, o mais estranho é que utilizando o PHP para acessar uma tabela e realizar um fetch funciona normal.

Já coloquei o nome da procedure em maiusculo na string que monta o SQL e nada.

Alguém pode me ajudar?
Avatar do usuário
Marciel
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 158
Registrado em: Qui, 03 Mai 2007 10:12 am
Localização: Vitória - ES
Sabe qual o cúmulo da ignorância, da apatia e da ira?
Não sei, não quero saber e tenho raiva de quem sabe.

Está executando a procedure com o mesmo usuário que a criou?

Se o usuário de criação é diferente do usuário de acesso, use "<usuario>.proc_calc" na chamada, ou altere o schema da sessão.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Sim, é o mesmo usuário e para tirar dúvidas eu já tinha feito a chamada passando o usuário de criação.

Isto está bem estranho.
Avatar do usuário
Marciel
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 158
Registrado em: Qui, 03 Mai 2007 10:12 am
Localização: Vitória - ES
Sabe qual o cúmulo da ignorância, da apatia e da ira?
Não sei, não quero saber e tenho raiva de quem sabe.

Não sei se é isto que está causando o erro, mas variáveis de saída deve ser passadas para a procedure via referência:

Selecionar tudo

$con = oci_connect($user, $pass, $server);

$sql = 'begin proc_calc(:retorno); end;';
$stm = oci_parse($con , $sql);

oci_bind_by_name($stm , ':retorno', &$retorno, 32700); // note o "&" antes da variável

$ex = oci_execute($stm);
Faça um teste aí.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes