Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从包中的php从oracle存储过程中获取OUT变量值_Php_Oracle_Stored Procedures - Fatal编程技术网

如何从包中的php从oracle存储过程中获取OUT变量值

如何从包中的php从oracle存储过程中获取OUT变量值,php,oracle,stored-procedures,Php,Oracle,Stored Procedures,我的oracle数据库中有一个包中的存储过程。假设我的包名是myPackage,过程名是myProcedure,过程中有两个参数,一个varchar2 in参数和一个varchar2 OUT参数。我使用了以下代码 <?php $conn = oci_connect("username", "password", "123.456.7.890/XXX"); if (!$conn) { $m = oci_error(); trigger_error(htmlentities($

我的oracle数据库中有一个包中的存储过程。假设我的包名是myPackage,过程名是myProcedure,过程中有两个参数,一个varchar2 in参数和一个varchar2 OUT参数。我使用了以下代码

<?php
  $conn = oci_connect("username", "password", "123.456.7.890/XXX");
  if (!$conn) {
  $m = oci_error();
  trigger_error(htmlentities($m['message']), E_USER_ERROR);
  }
  $p1 = 'MUKUND';
  $p2 = 'g';
  $stid = oci_parse($conn, "begin xx_sample.sayHello(:p1, :p2); end;"
  oci_bind_by_name($stid, ':p1', $p1);
  oci_bind_by_name($stid, ':p2', $p2);

  oci_execute($stid);


  print "$p2\n";



  oci_free_statement($stid);
  oci_close($conn);
身体

我在sqldeveloper中运行了它,得到了结果,但是当我通过上面的代码在php中运行它时,我没有得到任何输出

还有一件事要提的是,在中的所有教程中,
我都没有找到任何通过包调用该过程的教程。

所以我创建了另一个程序,我在这个网站上找到了它

我创建了以下过程,这次没有包

<?php

 $conn = oci_connect('hr', 'welcome', 'localhost/XE');
 if (!$conn) {
 $e = oci_error();
 trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
 }

 $p1 = 8;

  $stid = oci_parse($conn, 'begin myproc(:p1, :p2); end;');
  oci_bind_by_name($stid, ':p1', $p1);
  oci_bind_by_name($stid, ':p2', $p2, 40);

  oci_execute($stid);

  print "$p2\n";   // prints 16

  oci_free_statement($stid);
  oci_close($conn);
但是这次我在运行这个php文件时得到了输出


有人告诉我我做错了什么?请帮助我获取输出

是否应该是
开始应用程序。xx_smpl.sayHello(:p1,:p2);结束
@MaheswaranRavisankar我编辑了这个问题,我也试过了,不是吗
beginapps.xx_smpl.sayHello(:p1,:p2);结束@MaheswaranRavisankar我编辑了这个问题,我也试过了
CREATE OR REPLACE package body APPS.xx_smpl AS
PROCEDURE sayHello (name1 IN VARCHAR2, greeting OUT VARCHAR2)
IS
BEGIN
greeting := 'Hello ' || name1;
END;
END;
/
<?php

 $conn = oci_connect('hr', 'welcome', 'localhost/XE');
 if (!$conn) {
 $e = oci_error();
 trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
 }

 $p1 = 8;

  $stid = oci_parse($conn, 'begin myproc(:p1, :p2); end;');
  oci_bind_by_name($stid, ':p1', $p1);
  oci_bind_by_name($stid, ':p2', $p2, 40);

  oci_execute($stid);

  print "$p2\n";   // prints 16

  oci_free_statement($stid);
  oci_close($conn);
CREATE OR REPLACE PROCEDURE myproc(p1 IN NUMBER, p2 OUT NUMBER) AS
BEGIN
p2 := p1 * 2;
END;