J'ai la procédure stockée suivante:
declare @CodigoRet int exec Generator 'LancaContaContabil', @Codigo = @CodigoRet output Select @CodigoRet
Et j'essaye d'appeler cette procédure dans Laravel 5.5 mais cela me donne l'erreur: "Le résultat actif pour la requête ne contient aucun champs":
$results = DB::select(DB::raw('DECLARE @CodigoRet INT; execute Generator \'LancaContaContabil\', @Codigo = @CodigoRet OUTPUT;')); echo $results; die;
Même erreur en utilisant la variante sans dbraw:
$results = DB::select('DECLARE @CodigoRet INT; EXEC Generator \'LancaContaContabil\', @Codigo = @CodigoRet OUTPUT;'); echo $results; die;
Également essayé avec déclaration, mais le return est toujours 1:
$results = DB::statement('DECLARE @CodigoRet INT; EXEC Generator \'LancaContaContabil\', @Codigo = @CodigoRet OUTPUT;'); echo $results; die;
EDIT: J'ai créé la procédure sous le nom 'testeproc' et maintenant j'ai essayé ceci, avec la même erreur que ci-dessus:
$results = DB::select('EXECUTE testeproc'); echo $results; die;
Qu'est-ce que je fais mal?
essaye ça:
Sans paramètre:
$results = DB::select('EXEC your_stored_procedure');
Paramètres de Wit
$results = DB::select('exec your_stored_procedure("parameter1", "parameter2",..)');
ou
$results = DB::select('exec your_stored_procedure(?,?,..)',array($parameter1,$parameter2));
Je l'ai juste réglé. Je postrai ici la solution qui peut aider d'autres personnes avec le même problème.
$dbh = DB::connection()->getPdo(); $sth = $dbh->prepare("SET NOCOUNT ON; EXEC ProcLancaContaContabil"); $sth->execute(); $codigo = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
L'astuce consiste à utiliser "SET NOCOUNT ON" avant d'appeler la procédure. J'ai trouvé ça ici