Я пытаюсь вызвать PLSQL PROCEDURE с помощью php, но у меня возникают проблемы с настраиваемыми типами данных.Тип пользовательских данных PLSQL при вызове процедур в php
Один из столбцов в моей таблице имеет пользовательский тип данных ниже.
create or replace TYPE CUST_ADDRESS_TYP
AS OBJECT
( STREET_ADDRESS VARCHAR2 (40) ,
CITY VARCHAR2 (30) ,
STATE_PROVINCE VARCHAR2 (10) ,
POSTAL_CODE VARCHAR2 (10) ,
COUNTRY_ID CHAR (2)
)
;
Ниже, как у меня есть процедура
create or replace PROCEDURE process_order
(
p_customer_address in CUSTOMER.CUST_ADDRESS%TYPE
)
IS
для вставки в этот Colum в PLSQL это пример того, что я использую
CUST_ADDRESS_TYP('77 Old Street','San Diego','CA','94567','US')
и она работает просто отлично
Однако, когда я делаю это в PHP, я получаю
$p_customer_address = "CUST_ADDRESS_TYP('45 High Street','Toronto','CO','94567','CN')";
$stid = oci_parse($conn, 'begin process_order(:p_customer_address); end;');
oci_bind_by_name($stid, ':p_customer_address', $p_customer_address);
Предупреждение: oci_execute(): ORA-06550: строка 1, столбец 7: PLS-00306: неверное число или типы аргументов в вызове к 'PROCESS_ORDER' ORA-06550
Спасибо.
Переменная связывания не оценивает, что вы проходите. Процедуре передается строка, которая выглядит как экземпляр объекта, но не оценивается как одна - как отдельная строка. Можете ли вы связать пять полей объекта отдельно? Как вы строите '$ p_customer_address'? –
Взгляните на http://www.oracle.com/technetwork/articles/fuecks-sps-095636.html похоже на то, что вы хотите сделать, но с типом varray не уверены, можете ли вы перенести это на объект, но дает вам некоторые идеи о том, что попробовать. –