4 votes

Appeler Oracle PL/SQL retournant CLOB depuis Laravel

J'utilise le paquet Laravel-OCI8 pour communiquer avec la base de données Oracle depuis Laravel. J'appelle une fonction d'Oracle qui renvoie le résultat sous forme de CLOB. Voici le code Laravel :

$stmt = $this->pdo_obj->prepare("begin :result := test_pkg.get_data(:param1,:param2,:param3); end;");
$stmt->bindParam(':result', $result, \PDO::PARAM_STR);
$stmt->bindParam(':param1', $param1, \PDO::PARAM_STR);
$stmt->bindParam(':param2', $param2, \PDO::PARAM_STR);
$stmt->bindParam(':param3', $param3, \PDO::PARAM_STR);
$stmt->execute();
return response($result);

Mais je reçois une erreur : ORA-06502 : PL/SQL : erreur numérique ou de valeur : tampon de chaîne de caractères trop petit

J'ai aussi essayé de suivre :

$response   = $this->oracle_obj->select("select test_pkg.get_data('$param1','$param2','$param3') as refc from dual");

Mais il n'est pas possible d'utiliser l'appel ci-dessus dans mon cas car il y a des opérations DML dans ma fonction. Existe-t-il une autre méthode pour appeler la fonction d'oracle dans Laravel en utilisant OCI8 ?

-1voto

Je pense que le problème n'est pas la cause Laravel ou liée à l'utilisation de toute autre méthode pour faire appel à la fonction d'oracle en Laravel . Il est nécessaire de spécifier le type de données explicite correct pour le paramètre lors de la liaison des paramètres à l'aide de l'option $stmt->bindParam et en fixant la longueur du type de données. Selon la documentation officielle de PHP

Pour indiquer qu'un paramètre est un OUT d'une procédure stockée, vous devez définir explicitement la longueur.

Reportez-vous à la type de données y longueur spécification de PDOStatement::bindParam Document PHP http://php.net/manual/en/pdostatement.bindparam.php

Juste un exemple,

$sth->bindParam(':param1', $param1, PDO::PARAM_INT);
$sth->bindParam(':param2', $param2, PDO::PARAM_STR, 12);

Référence

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X