Php Laravel 5.7.13-如何执行oracle PL/SQL Declare Begin End语句
我使用“Oracle SQL Developer”工具连接到Oracle DB,可以成功运行如下语句(例如): 此外,我还可以成功地运行简单的查询,如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
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")');