【发布时间】:2017-05-16 18:04:12
【问题描述】:
我的 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());
这是我收到的错误消息:
致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE [HY000]:一般错误: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 中抛出
我希望有人可以帮助我:)
【问题讨论】:
-
stackoverflow.com/questions/12287875/… 查看此内容,看看是否有帮助。
-
感谢您的回答。我以前看到过,但是我无法将 SQL 代码更改为管道语句。但是,我设法自己解决了。