如何从 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 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Laravel DOMPDF:如何从存储文件夹加载图像?

如何从 Windows 脚本文件执行 oracle 存储过程?

在 Laravel 中通过 Ajax 存储数据失败

从 C# 调用 Oracle 存储过程?

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接

Laravel + Vue JS:从数据库中获取/存储 Eloquent 模型的值