2017-10-05 60 views
0

我有Laravel和Yajra包Oracle数据库,我怎么能叫从Laravel 5.4如何在Laravel上调用oracle程序?

一个Oracle过程。这是我的Oracle过程:

create or replace procedure PRW_GENERA_FACTURA(
      pnro in number, 
      pmsj out VARCHAR2 
      ) is 
     BEGIN 
      pmsj := 'El nro. es '||pnro; 

     end PRW_GENERA_FACTURA; 

而且我想这对我的控制器:

$val1 = 20; 
$result = DB::connection('ora_db')->select('exec 
PRW_GENERA_FACTURA(?)',array($val1)); 
return $result; 

它给了我这个错误:

Error Code : 900 Error Message : ORA-00900: invalid SQL statement Position : 0 Statement : exec PRW_GENERA_FACTURA(:p0) Bindings : [20] (SQL: exec PRW_GENERA_FACTURA(20))

回答

1

我想你必须这样做以RAW格式:

$val1 = 20; 

$result = DB::connection('ora_db')->select(
    DB::raw("exec PRW_GENERA_FACTURA(:val1)"), array ('val1' => $val1) 
); 

return $result; 

这个使用PHP到控制器:

$conn = oci_connect('apxjfdev01', 'x....' ,'x...'); 
if (!$conn) { 
$e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), 
E_USER_ERROR); 
} 
$sql = ' BEGIN PRW_GENERA_FACTURA(:PNRO, :PMSJ); END; '; $sql = 
oci_parse($conn,$sql); oci_bind_by_name($sql, ":PNRO", $val1, 32); 
oci_bind_by_name($sql, ":PMSJ", $val2, 32); 
$val1 = $id_f; 
oci_execute($sql); 
+0

给我一个错误:错误代码:900 错误消息:ORA-00900:无效SQL语句 位置:0 声明:EXEC PRW_GENERA_FACTURA(:VAL1) 绑定:[20] (SQL:EXEC PRW_GENERA_FACTURA(:VAL1)) – Leoh

+0

可以尝试'DB ::原始( “EXEC PRW_GENERA_FACTURA(”。 $ val1。 “))''以确保它与该语句无关。你能在Oracle CLI(sqlplus)中尝试使用相同的语句吗? – Webdesigner

+0

给了我同样的错误,但我在我的控制器上使用raw php修复了它。感谢您的帮助 – Leoh

相关问题