【问题标题】:Execute Oracle stored procedures with Symfony & doctrine使用 Symfony 和学说执行 Oracle 存储过程
【发布时间】:2020-07-30 17:06:41
【问题描述】:

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

x_pkg.get_xID

它需要一个输入并且将输出一个字符串

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

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

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

在这种情况下,我收到错误:ORA-01008: not all variables bound (500 Internal Server Error)

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

在这种情况下,我收到错误:ORA-06553: PLS-306: wrong number or types of arguments in call to 'GET_XID' (500 Internal Server Error)

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

在这种情况下,我收到错误:ORA-06576: not a valid function or procedure name (500 Internal Server Error)

感谢您的帮助。

【问题讨论】:

标签: php oracle symfony stored-procedures doctrine


【解决方案1】:

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

请记住,Oracle 数据库有点棘手,与其他社区使用的数据库(如 MySQL)不同,它有自己的权力和严格的规则,

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

因此,在您的第二种情况下,您会收到该错误,因为 Oracle 期望 OUT 变量是您的 Call 的一部分,而您的代码中并非如此,并且因为它在过程中

在你的第三种情况下,使用 ${val} 是无效的,即使它对 PHP 本身有效,Oracle 数据库以其他方式查看它,所以这不是你的选择,

现在关于第一种情况,你应该确保你的过程返回一个 cursor 而不是一个变量,我认为你应该在你的 Oracle 数据库和下一行代码中检查它你在哪里执行查询(这里没有发布,所以我不能确定),这是 Oracle 数据库的一个棘手部分,你应该确保你的程序返回什么以避免错误,

祝你好运:)

【讨论】:

  • 你是对的,问题出在游标上,程序不返回游标而是返回生成的id
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2011-06-19
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多