如何从包含

时间:2015-11-24 06:26:20

标签: php oracle stored-procedures

我的oracle db中有一个存储过程。假设我的包名是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);

并在xx_sample.sayHello中查看规范和正文

CREATE OR REPLACE package APPS.xx_smpl
    AS
     procedure sayHello (name1 IN VARCHAR2, greeting OUT VARCHAR2) ;
     END;
  /

CREATE OR REPLACE package body APPS.xx_smpl AS
PROCEDURE sayHello (name1 IN VARCHAR2, greeting OUT VARCHAR2)
IS
BEGIN
greeting := 'Hello ' || name1;
END;
END;
/

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

还有一件事需要提及的是,有些教程经历了i didnt find any tutorial where the procedure is called via package.

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

http://php.net/manual/en/oci8.examples.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);

相应的程序是

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

但是这次我运行这个php文件时得到了输出!!!

所以有人请告诉我,我做错了什么?请帮助我获得输出

0 个答案:

没有答案