大家好,oracle
请教php调用一个函数返回一个非标准类型的值这样的问题。
那些。我从 php 调用该函数:$query = $this->db->query ("select название_пакета.название_функции(:переменные) res from dual", $значения переменных);
在 Oracle 中,作为该函数的结果,输出是一个数组(我不知道它是如何正确调用的)这种类型:
TYPE название_типа is TABLE of varchar2(255) INDEX by BINARY_INTEGER;
название_массива название_типа; --объявил массив.
给出错误信息:
ORA-00902 无效的数据类型。
告诉我如何正确地接受它,以便以后我可以使用它或以某种方式json
将所有这些东西重新制作成一个字符串,然后将其传输到 php。
不幸的是,声明的数据类型(数组)只能在 PL/SQL 块中使用。它不能用于查询。要在查询中使用并传递给 PHP,您必须使用全局创建的对象类型。不幸的是,您没有指定需要此数组中的哪种信息。假设您需要字符串本身及其在数组中的索引。然后我们需要创建两种类型:表示字符串的对象和此类对象的集合:
如果您只需要行本身,不需要索引,那么您可以使用系统类型而不是您自己的
ODCIVarchar2List
.接下来,您需要在包中重新制作您的函数,以便它返回这种类型的字符串,或者如果它无法更改,则制作一个包装函数,该函数将从原始函数接收一个数组并以合适的形式返回它。要返回数组以减少内存消耗,强烈建议使用
pipelined
函数。此类函数会随着使用逐渐返回结果,不会组成整个数组再返回。该函数看起来像这样:最后,我们可以像普通表一样使用该函数在 PHP 中返回结果(返回名为key和val的列,如我们的类型中所述):