1
我正在用PHP + Oracle開發一個簡單的系統。數據庫有一個過程,我需要發送一些變量並獲得返回。很簡單,但我錯過了一些東西。Oci_bind_by_name返回null
我將顯示所有代碼,我認爲問題出在$ sql。
這是程序在Oracle SQL Developer中運行:
Declare
nAlternativo Number;
nTipo_Custo_Id Number;
Begin
web.karcst_price_api_pkg.Dre_Preco_Bruto_p (pp_Org_Id => 0
, pp_Item => '6043830'
, pp_Prazo_Ins => 30
, pp_Estado => 'SP'
, pp_Estado_Faturamento => null
, pp_Cidade => 'SAO PAULO'
, pp_Tipo_Frete => 'CIF'
, pp_Preco_Venda_Bruta => 5
, pp_Moeda => 'BRL'
, pp_Embalagem => 'Padrao'
, pp_Preco_Outros_Custos_Com => 0
, pp_Pedido => ''
, pp_Pedido_Item => ''
, pp_Operacao => ''
, pp_Cnpj_Cpf => ''
, pp_Alternativo =>nAlternativo
, pp_Tipo_Custo_Id => nTipo_Custo_Id);
dbms_output.put_line('nAlternativo : '|| nAlternativo);
dbms_output.put_line('nTipo_Custo_Id : '|| nTipo_Custo_Id);
End;
的DBMS輸出:
nAlternativo : 3
nTipo_Custo_Id : 1480
的PHP代碼:
<?php
$conn = oci_connect('-', '-', $MYDB); // CONECTED OK
$script = 'BEGIN web.karcst_price_api_pkg.Dre_Preco_Bruto_p(:pp_Org_Id,:pp_Item,:pp_Prazo_Ins,:pp_Estado,:pp_Estado_Faturamento,:pp_Cidade,:pp_Tipo_Frete,:pp_Preco_Venda_Bruta,:pp_Moeda,:pp_Embalagem,:pp_Preco_Outros_Custos_Com,:pp_Pedido,:pp_Pedido_Item,:pp_Operacao,:pp_Cnpj_Cpf,:pp_Alternativo,:pp_Tipo_Custo_Id); END;';
$stmt = oci_parse($conn, $script) or die('Cannot parse query');
$pp_Org_Id = 0;
$pp_item = '6043830';
$pp_Prazo_Ins = 30;
$pp_Estado = "SP";
$pp_Estado_Faturamento = NULL;
$pp_Cidade = "São Paulo";
$pp_Tipo_Frete = "CIF";
$pp_Preco_Venda_Bruta = 5;
$pp_Moeda = "BRL";
$pp_Embalagem = "Padrao";
$pp_Preco_Outros_Custos_Com = 0;
$pp_Pedido = '';
$pp_Pedido_Item = '';
$pp_Operacao = '';
$pp_Cnpj_Cpf = '';
oci_bind_by_name($stmt, ":pp_Org_Id", $pp_Org_Id) or die ("Crap: $pp_Org_Id");
oci_bind_by_name($stmt, ":pp_Item", $pp_Item) or die ("Crap: $pp_Item");
oci_bind_by_name($stmt, ":pp_Prazo_Ins", $pp_Prazo_Ins) or die ("Crap: $pp_Prazo_Ins");
oci_bind_by_name($stmt, ":pp_Estado", $pp_Estado) or die ("Crap: $pp_Estado");
oci_bind_by_name($stmt, ":pp_Estado_Faturamento", $pp_Estado_Faturamento) or die ("Crap: $pp_Estado_Faturamento");
oci_bind_by_name($stmt, ":pp_Cidade", $pp_Cidade) or die ("Crap: $pp_Cidade");
oci_bind_by_name($stmt, ":pp_Tipo_Frete", $pp_Tipo_Frete) or die ("Crap: $pp_Tipo_Frete");
oci_bind_by_name($stmt, ":pp_Preco_Venda_Bruta", $pp_Preco_Venda_Bruta) or die ("Crap: $pp_Preco_Venda_Bruta");
oci_bind_by_name($stmt, ":pp_Moeda", $pp_Moeda) or die ("Crap: $pp_Moeda");
oci_bind_by_name($stmt, ":pp_Embalagem", $pp_Embalagem) or die ("Crap: $pp_Embalagem");
oci_bind_by_name($stmt, ":pp_Preco_Outros_Custos_Com", $pp_Preco_Outros_Custos_Com) or die ("Crap: $pp_Preco_Outros_Custos_Com");
oci_bind_by_name($stmt, ":pp_Pedido", $pp_Pedido) or die ("Crap: $pp_Pedido");
oci_bind_by_name($stmt, ":pp_Pedido_Item", $pp_Pedido_Item) or die ("Crap: $pp_Pedido_Item");
oci_bind_by_name($stmt, ":pp_Operacao", $pp_Operacao) or die ("Crap: $pp_Operacao");
oci_bind_by_name($stmt, ":pp_Cnpj_Cpf", $pp_Cnpj_Cpf) or die ("Crap: $pp_Cnpj_Cpf");
oci_bind_by_name($stmt, ":pp_Alternativo", $pp_Alternativo, 500) or die ("Crap: pp_Alternativo");
oci_bind_by_name($stmt, ":pp_Tipo_Custo_Id", $pp_Tipo_Custo_Id, 500) or die ("Crap: pp_tipo_custo_id");
oci_execute($stmt);
var_dump($pp_Tipo_Custo_Id); // NULL
oci_free_statement($stmt);
oci_close($conn);
?>
的應用retuns不會出錯,而且綁定變量爲空。
問候,