首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.7.13 -如何执行oracle PL/SQL Declare-Begin-End语句

Laravel 5.7.13 -如何执行oracle PL/SQL Declare-Begin-End语句
EN

Stack Overflow用户
提问于 2018-12-16 20:28:42
回答 1查看 1.3K关注 0票数 2

我使用"Oracle SQL Developer“工具连接到Oracle DB,并且可以成功运行如下语句(例如):

代码语言:javascript
复制
DECLARE
p0_ VARCHAR2(32000) := 'Charlie';
p1_ FLOAT := 35;
p2_ VARCHAR2(32000) := 'Spain';
...
BEGIN
Users.Validate(p0_,p1_,p2_ ....);
END;

此外,我还可以成功地运行像Select * from ...这样的简单查询。服务器在4-5秒内响应。

我的问题:我有一个带有oracle连接的Laravel 5.7.13项目(yajra/laravel-oci8模块),当我运行像Select ...这样的简单查询时,它的工作正常。

代码语言:javascript
复制
DB::select("Select ...");

但是我不能运行开始语句:

代码语言:javascript
复制
DB::select("DECLARE
    p0_ VARCHAR2(32000) := 'Charlie';
    p1_ FLOAT := 35;
    p2_ VARCHAR2(32000) := 'Spain';
    ...
    BEGIN
    Users.Validate(p0_,p1_,p2_ ....);
    END;");

我也尝试过DB::Select(DB::raw("DECLARE ..."))语句和DB::Statement(...),但都不起作用。

我正在使用Xampp和apache,当我尝试运行这个语句时,Apache没有响应,没有错误,只是看起来像是在尝试执行语句,但没有完成,即使我有一个10秒的超时( php.ini中的max_execution_time=10,也是由我的php代码通过指令:ini_set('max_execution_time', 10)强制执行的)。

我如何在Laravel中执行这种语句?可能是用户权限问题吗?(我已经在Laravel和"Oracle SQL Developer“工具中配置了相同的用户和连接)

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-12-17 06:01:54

就Lavarel而言,不可能直接从Lavarel执行PL/SQL块。

所以最好的(只有?)一种选择是,首先使用SQLDeveloper或另一个Oracle客户机在数据库中直接创建一个存储过程,然后从Lavarel调用它,并向它传递相关的参数。

以下是基于您的用例的示例:

1)创建存储过程(注意: Oracle varchar2的最大值是4000,而不是32000):

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE myproc
(
    p0 IN VARCHAR2(4000),
    p1 IN FLOAT,
    p2 IN VARCHAR2(4000)
)
AS
BEGIN
    Users.Validate(p0,p1,p2);
END;

2)从Lavarel调用存储过程:

代码语言:javascript
复制
DB::statement('exec myproc("Charlie", 35, "Spain")');

如果需要从过程中返回某些内容,请使用DB::select而不是DB::statement

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53802110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档