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

Php Laravel 5.7.13-如何执行oracle PL/SQL Declare Begin End语句,php,oracle,laravel,plsql,Php,Oracle,Laravel,Plsql,我使用“Oracle SQL Developer”工具连接到Oracle DB,可以成功运行如下语句(例如): 此外,我还可以成功地运行简单的查询,如Select*from…。服务器在4-5秒内响应 我的问题是: 我有一个带有oracle连接(yajra/Laravel-oci8模块)的Laravel 5.7.13项目,当我运行像Select…这样的简单查询时,它的工作正常: DB::select("Select ..."); 但我无法运行开头语句: DB::select("DECLARE

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

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

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

DB::select("Select ...");
但我无法运行开头语句:

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::语句(…)
,但不起作用

我使用的是Xampp和apache,当我尝试运行这些语句时,apache没有响应,没有错误,只是看起来好像正在尝试执行语句,但没有完成,即使我有10秒的超时(
max\u execution\u time=10
在php.ini中,也是由我的php代码和指令强制执行:
ini\u set)(“最大执行时间”,10)

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


谢谢!

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

因此,最好的(唯一的?)选择是首先使用SQLDeveloper或其他Oracle客户机直接在数据库中创建存储过程,然后从Lavarel调用它,并将相关参数传递给它

下面是一个基于您的用例的示例:

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

2) 从Lavarel调用存储过程:

DB::statement('exec myproc("Charlie", 35, "Spain")');

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

尝试
DB::statement
?是的,我已在说明中指出,DB::select,DB::statement没有得到响应,数据库中也没有结果。有没有其他方法可以对数据库执行这种类型的查询?
CREATE OR REPLACE PROCEDURE myproc
(
    p0 IN VARCHAR2(4000),
    p1 IN FLOAT,
    p2 IN VARCHAR2(4000)
)
AS
BEGIN
    Users.Validate(p0,p1,p2);
END;
DB::statement('exec myproc("Charlie", 35, "Spain")');