如何从包中的php从oracle存储过程中获取OUT变量值
我的oracle数据库中有一个包中的存储过程。假设我的包名是myPackage,过程名是myProcedure,过程中有两个参数,一个varchar2 in参数和一个varchar2 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($
<?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;