我正在尝试在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)
谢谢您的帮助。
我可以帮助您解释为什么会出现这些错误,然后可能会帮助您找到解决问题的方法,
并且请记住,Oracle数据库有点棘手,与其他社区使用的数据库(例如MySQL)不同,它具有自己的强大功能和严格的规则,
**我将在最后解释第一种情况。*
因此,在第二种情况下,您会收到该错误,因为Oracle期望OUT变量是您的Call的一部分,这在您的代码中不是这种情况,因为它在过程内] >
在您的第三种情况下,即使对PHP本身有效,使用$ {val}
也无效,Oracle数据库以其他方式查看它,因此这不是您的选择,现在,关于第一种情况,您应该确保过程返回的是cursor
而不是变量,我认为您应该在Oracle数据库以及执行您的下一行代码中对其进行检查查询(此处未发布,因此我不确定),这是Oracle数据库的棘手部分,您应确保过程返回什么以避免该错误,祝你好运:)