php - 如何在php中绑定oracle关联数组?
问题描述
我在 php 中有一个具有复杂类型请求的方法。在我的方法中,我必须将请求绑定为接收关联数组的 oracle 过程/函数中的参数。
我尝试使用 oci_bind_array_by_name。
class ExampleRequest {
/**
* @soap
* @var string
*/
public $Email;
/**
* @soap
* @minOccurs 0
* @var ExampleItem[]
*/
public $ExampleItems;
}
class ExampleItem {
/**
* @soap
* @var string
*/
public $Type;
/**
* @soap
* @var integer
*/
public $Points;
}
//Test(ExampleRequest)
public function Test($request)
{
...
$sql = "BEGIN PROCEDURE_TEST(:p1, :p2, :p3);END;";
$res = oci_parse($this->dbCon, $sql);
oci_bind_by_name($res, ":p1", $request->Email);
oci_bind_array_by_name($res, ":p2", $request->ExampleItems->Type,count($request->ExampleItems->Type), -1, SQLT_CHR);
oci_bind_array_by_name($res, ":p3", $request->ExampleItems->Points,count($request->ExampleItems->Points), -1, SQLT_INT);
if (!oci_execute($res)){
throw new SoapFault(4, "Internal server error");
}
...
}
$request = new ExampleRequest();
$request->ExampleItems= new ExampleItem();
$request->Email = "example@outlook.com";
$request->ExampleItems->Type= array('A','B');
$request->ExampleItems->Points= array('587', '19');
$client->Test($request);
TYPE array1 IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
TYPE array2 IS TABLE OF NUMBER(10) INDEX BY PLS_INTEGER;
PROCEDURE_TEST(p_email IN VARCHAR2, p_type IN array1, p_points IN array2) IS
BEGIN
DELETE FROM TEMP;
FOR i IN 1 .. p_type.COUNT
LOOP
INSERT INTO TEMP (x1, x2, x3)
VALUES (p_type(i), p_points(i), i);
END LOOP;
COMMIT;
FOR cnt IN (SELECT TBL.ID ID_TBL, TMP.X1, TMP.X2 FROM TABLEA TBL, TEMP TMP WHERE TBL.TYPE = TEMP.X1)
LOOP
UPDATE TABLEA SET CODE = CODE + cnt.X2 WHERE ID = cnt.ID_TBL;
COMMIT;
END LOOP;
DELETE FROM TEMP;
END;
执行时发生错误,因为不幸的是执行了 SoapFault 行并且我收到错误:object(SoapFault)#4...
解决方案
推荐阅读
- java - 在文件 Java 中查找一定数量的子字符串
- twitter - tweepy 第一个程序:不识别 API 调用
- r - 如何在 R Studio 中将两个数据集合并为一个并用两个数据集绘制一张图
- algorithm - 二分图中边的均匀分布
- java - Java - 从 JPanel 扩展,在其中添加新面板
- linux - 将脚本加载到 /bin,然后删除,但仍然有效
- javascript - 即使在等待网页加载时也未捕获类型错误
- mysql - 将多个值插入一列,仅在其他列中插入一个 MySql Mamp
- laravel-5 - Laravel - 在 Web 根目录中仅放置公共文件夹只会出现空白屏幕
- asp.net - ASP.Net 按钮不调用 Post 方法