首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用存储函数

问调用存储函数
EN

Stack Overflow用户
提问于 2017-01-02 16:15:31
回答 1查看 616关注 0票数 0

我在Oracle数据库中有一个存储函数,它返回一个表(类型)。在中运行它时,它工作得很好,但我无法让它在PHP中与PDO一起工作。

这里是我的存储函数:

代码语言:javascript
复制
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;

这里是表类型:

代码语言:javascript
复制
CREATE OR REPLACE 
TYPE TableforAktuelleMenues AS TABLE OF TypeAktuellesMenue;

这里的...and是另一种类型:

代码语言:javascript
复制
CREATE OR REPLACE 
TYPE TypeAktuellesMenue
AS OBJECT
(
  MenueId INTEGER,
  Bezeichnung VARCHAR2(45),
  Preis FLOAT,
  Wochentag VARCHAR(2)  
);

因此,正如我前面提到的,在SQL中使用下面的查询调用它时,该函数工作得很好。

代码语言:javascript
复制
SELECT * FROM table(f_aktuelle_Menues(0));

...but它不适用于、PHP和PDO,其代码如下:

代码语言:javascript
复制
$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中

我希望有人能帮助我:)

EN

回答 1

Stack Overflow用户

发布于 2017-01-04 15:19:35

好吧,我的问题的解决方案非常奇怪,我自己解决了。

我的类型是这样定义的:

代码语言:javascript
复制
CREATE OR REPLACE 
TYPE TypeAktuellesMenue
AS OBJECT
(
  MenueId INTEGER,
  Bezeichnung VARCHAR2(45),
  Preis FLOAT,
  Wochentag VARCHAR(2)  
);

所以,"Wochentag“栏目的大小是2,这就是问题所在。

In SQLDeveloper,以下函数返回周五的“FR”:

代码语言:javascript
复制
TO_CHAR(some_date, 'DY')

...but在用PDO调用完全相同的函数时,我们得到了周五返回的'FRI‘,对于我们的"Wochentag“专栏来说,这是3个字符的长度和太大。

因此,我唯一需要更改的是Wochentag列的大小,从2到3,代码运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41430087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档