使用Symfony和原则执行Oracle存储过程

问题描述 投票:1回答:1

我正在尝试在Oracle数据库中执行存储过程:

x_pkg.get_xID

需要一个输入并输出一个字符串

我已经尝试了几种在互联网上找到的不同选项:

$val = 'DATABASE';
$result = new ResultSetMapping ();

$query  = $entityManager -> createNativeQuery ("BEGIN x_pkg.get_xID(${val}, :cursor); END;", $result);

在这种情况下,我得到错误:ORA-01008:并非所有变量都已绑定(500内部服务器错误)

$query = $entityManager -> createNativeQuery ("CALL x_pkg.get_xID(:data)", $result);
$query -> setParameters (['data' => $val]);

在这种情况下,我得到错误:ORA-06553:PLS-306:调用'GET_XID'时参数或参数类型错误(500内部服务器错误)

$query = $entityManager -> createNativeQuery ("CALL x_pkg.get_xID(${val})", $result);

在这种情况下,我得到错误:ORA-06576:无效的函数或过程名称(500 Internal Server Error)

谢谢您的帮助。

php oracle symfony stored-procedures doctrine
1个回答
0
投票

我可以帮助您解释为什么会出现这些错误,然后可能会帮助您找到解决问题的方法,

并且请记住,Oracle数据库有点棘手,与其他社区使用的数据库(例如MySQL)不同,它具有自己的强大功能和严格的规则,

**我将在最后解释第一种情况。*

因此,在第二种情况下,您会收到该错误,因为Oracle期望OUT变量是您的Call的一部分,这在您的代码中不是这种情况,因为它在过程内] >

在您的第三种情况下,即使对PHP本身有效,使用$ {val}

也无效,Oracle数据库以其他方式查看它,因此这不是您的选择,

现在,关于第一种情况,您应该确保过程返回的是cursor

而不是变量,我认为您应该在Oracle数据库以及执行您的下一行代码中对其进行检查查询(此处未发布,因此我不确定),这是Oracle数据库的棘手部分,您应确保过程返回什么以避免该错误,

祝你好运:)

© www.soinside.com 2019 - 2024. All rights reserved.