У меня есть хранимая функция в моей базе данных Oracle, которая возвращает таблицу (тип). При запуске в SQL Developer он работает отлично, но я не могу заставить его работать на PHP с PDO.PHP PDO Oracle вызов хранимой функции
Вот моя хранимая функция:
CREATE OR REPLACE FUNCTION f_aktuelle_Menues (p_week INTEGER)
RETURN TableforAktuelleMenues
IS
v_week INTEGER := p_week;
v_table TableforAktuelleMenues;
BEGIN
SELECT CAST(
MULTISET(
SELECT tm.MenueID "ID", men.Bezeichnung "Menuebezeichnung", men.Preis "Preis", TO_CHAR(tm.Datum, 'DY') "Tag"
FROM Tagesmenue tm INNER JOIN Menue men ON(tm.MenueID = men.MenueID)
WHERE TO_NUMBER(TO_CHAR(tm.Datum, 'WW')) = (TO_NUMBER(TO_CHAR(SYSDATE, 'WW')) + TO_NUMBER(v_week))
) AS TableforAktuelleMenues)
INTO v_table
FROM dual;
RETURN v_table;
COMMIT;
END;
Вот тип таблицы:
CREATE OR REPLACE
TYPE TableforAktuelleMenues AS TABLE OF TypeAktuellesMenue;
... а вот другой тип:
CREATE OR REPLACE
TYPE TypeAktuellesMenue
AS OBJECT
(
MenueId INTEGER,
Bezeichnung VARCHAR2(45),
Preis FLOAT,
Wochentag VARCHAR(2)
);
Так что, как я уже упоминал выше, функция прекрасно работает при вызове ее в SQL Developer с помощью следующего запроса :
SELECT * FROM table(f_aktuelle_Menues(0));
... но она не работает в PHP и PDO со следующим кодом:
$query = $conn->prepare("SELECT * FROM table(f_aktuelle_Menues(0))");
$query->execute();
print_r($query->fetchAll());
Это сообщение, которое ошибка я получаю:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 22814 OCIStmtExecute: ORA-22814: attribute or element value is larger than specified in type ORA-06512: at "EPCOS.F_AKTUELLE_MENUES", line 6 (ext\pdo_oci\oci_statement.c:148)' in C:\xampp\htdocs\epcos\home.php:70 Stack trace: #0 C:\xampp\htdocs\epcos\home.php(70): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\epcos\home.php on line 70
Я надеюсь, что кто-то может помочь мне :)
http://stackoverflow.com/questions/12287875/oracle-sql-ora-22814-attribute-or-element-value-is-larger-than-specified-in-type Просмотрите это и посмотрите, поможет ли он. –
Спасибо за ваш ответ. Я видел это раньше, но мне не удалось изменить SQL-код на оператор строки. Однако мне удалось решить это самостоятельно. – Stjubit