如何从 Laravel 执行 Oracle 存储过程
Posted
技术标签:
【中文标题】如何从 Laravel 执行 Oracle 存储过程【英文标题】:How to execute Oracle Stored Procedure from Laravel 【发布时间】:2021-01-28 00:28:10 【问题描述】:当我尝试运行命令时:
$pdo = DB::connection($group)->select("exec prc_recebcobdsg('0', 'null','01-01-2021', '27-01-2021', 'null') ");
我的 Laravel 页面返回: 错误代码:900 错误消息:ORA-00900:无效的 SQL 语句 职位:0 语句: exec prc_recebcobdsg('0', 'null','01-01-2021', '27-01-2021', 'null') 绑定:[] (SQL: exec prc_recebcobdsg('0', 'null','01-01-2021', '27-01-2021', 'null'))
我哪里错了?
【问题讨论】:
【参考方案1】:我不太了解 Laravel,但我相信有两个问题。
首先,exec
实际上不是 Oracle 语句,它只是 sqlplus 和 sqldeveloper 以及其他客户端中可用的简写。通常您需要将过程调用包含在开始/结束块中。
第二个问题是存储过程的执行并不是真正的选择,因此您不能使用select
连接方法。我相信你可以使用exec
方法。
这样的事情应该可以工作:
DB::connection($group)->getPdo()->exec("begin prc_recebcobdsg('0', 'null','01-01-2021', '27-01-2021', 'null'); end;");
【讨论】:
@gustavo 不要忘记使用“绑定参数”而不是硬编码常量,例如数据值。绑定对于安全性和可扩展性很重要。以上是关于如何从 Laravel 执行 Oracle 存储过程的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Windows 脚本文件执行 oracle 存储过程?