我在Oracle数据库中有一个存储函数,它返回一个表(类型)。在中运行它时,它工作得很好,但我无法让它在PHP中与PDO一起工作。
这里是我的存储函数:
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;这里的...and是另一种类型:
CREATE OR REPLACE
TYPE TypeAktuellesMenue
AS OBJECT
(
MenueId INTEGER,
Bezeichnung VARCHAR2(45),
Preis FLOAT,
Wochentag VARCHAR(2)
);因此,正如我前面提到的,在SQL中使用下面的查询调用它时,该函数工作得很好。
SELECT * FROM table(f_aktuelle_Menues(0));...but它不适用于、PHP和PDO,其代码如下:
$query = $conn->prepare("SELECT * FROM table(f_aktuelle_Menues(0))");
$query->execute();
print_r($query->fetchAll());这是我得到的错误消息:
致命错误:带有消息'SQLSTATEHY000:通用错误: 22814 OCIStmtExecute: ORA-22814:属性值或元素值大于ORA-06512: at "EPCOS.F_AKTUELLE_MENUES“中指定的异常‘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中
我希望有人能帮助我:)
发布于 2017-01-04 15:19:35
好吧,我的问题的解决方案非常奇怪,我自己解决了。
我的类型是这样定义的:
CREATE OR REPLACE
TYPE TypeAktuellesMenue
AS OBJECT
(
MenueId INTEGER,
Bezeichnung VARCHAR2(45),
Preis FLOAT,
Wochentag VARCHAR(2)
);所以,"Wochentag“栏目的大小是2,这就是问题所在。
In SQLDeveloper,以下函数返回周五的“FR”:
TO_CHAR(some_date, 'DY')...but在用PDO调用完全相同的函数时,我们得到了周五返回的'FRI‘,对于我们的"Wochentag“专栏来说,这是3个字符的长度和太大。
因此,我唯一需要更改的是Wochentag列的大小,从2到3,代码运行。
https://stackoverflow.com/questions/41430087
复制相似问题