Function в oracle з php
Привіт всім, таке питання, як викликаючи функцію oracle з php повернути значення не стандартного типу.
тобто. з php викликаю функцію: $query = $this->db->query ("select назва_пакета.назва_функції(:змінні) res from dual", $значення змінних);
В ораклі в результаті роботи функції на виході виходить масив (не знаю, як правильно це називається) ось такого типу:
ORA-00902 неправильний тип даних.
Підкажіть, як мені його правильно прийняти, щоб потім з ним працювати або якось у json рядок все це добро переробити і потім уже його передавати в php.
На жаль, так оголошений тип даних (масив) можна використовувати тільки всередині PL/SQL блоків. У запитах його не можна використовувати. Для використання в запитах і передачі PHP треба використовувати об'єктний тип, створюваний глобально. На жаль, ви не вказали, яка саме інформація з цього масиву потрібна. Припустимо вам потрібні й самі рядки та їх індекси у масиві. Тоді нам треба створити два типи: об'єкт, що представляє рядок і колекцію таких об'єктів:
Якщо вам потрібні самі рядки, а індекси не потрібні, то замість свого можна скористатися системним типом ODCIVarchar2List .
Далі треба або переробити вашу функцію в пакеті, щоб вона повертала рядки цього типу, або якщо її міняти не можна, зробити функцію обгортку, яка отримає масив від початкової функції і поверне його у відповідному вигляді. Для повернення масивів для меншої витрати пам'яті настійно рекомендується використовувати pipelined функції. Такі функції повертають результат поступово, у міру його використання, а не формують весь масив і потім повертають. Функція виглядатиме приблизно так:
І нарешті ми можемо використовувати функцію як звичайну таблицю, для повернення результату вPHP (повертаються колонки з іменами key та val, як описано в нашому типі):