[英]PHP PDO Oracle call stored function
我的Oracle数据库中有一个存储的函数,该函数返回一个表(类型)。 在SQL Developer中运行它时,它可以很好地工作,但我无法使其在带有PDO的PHP中工作。
这是我的存储函数:
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());
这是我收到的错误消息 :
致命错误:消息为'SQLSTATE [HY000]的未捕获异常'PDOException':一般错误:22814 OCIStmtExecute:ORA-22814:属性或元素值大于类型ORA-06512中指定的值:在“ EPCOS.F_AKTUELLE_MENUES”,第6行( ext \\ pdo_oci \\ oci_statement.c:148)'在C:\\ xampp \\ htdocs \\ epcos \\ home.php:70中堆栈跟踪:#0 C:\\ xampp \\ htdocs \\ epcos \\ home.php(70):PDOStatement-> execute()#1 {main}在第70行的C:\\ xampp \\ htdocs \\ epcos \\ home.php中抛出
我希望有人可以帮助我:)
好的, 解决我的问题的方法很奇怪,我已经设法自己解决了。
我的类型的定义如下:
CREATE OR REPLACE
TYPE TypeAktuellesMenue
AS OBJECT
(
MenueId INTEGER,
Bezeichnung VARCHAR2(45),
Preis FLOAT,
Wochentag VARCHAR(2)
);
因此,“ Wochentag ”列的大小为2,这就是问题所在。
在SQLDeveloper中 ,以下函数在星期五返回“ FR ”:
TO_CHAR(some_date, 'DY')
...但是,当使用PDO调用完全相同的函数时,星期五返回“ FRI ”,该字符长3个字符,对于“ Wochentag”列而言太大了。
因此,我唯一需要更改的是Wochentag列的大小从2更改为3,然后代码运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.