Exécutez une procédure stockée qui remplit une table temporaire, puis sélectionne dans la table temporaire
P粉551084295
P粉551084295 2023-09-09 14:20:33
0
1
340

J'ai une procédure stockée qui remplit une table temporaire globale.

CREATE GLOBAL TEMPORARY TABLE temptable ( ... ) ON COMMIT DELETE ROWS;

Je souhaite exécuter une procédure stockée et sélectionner les lignes ajoutées à une table temporaire.

$conn = oci_connect(...); $sql = "BEGIN POPULATETEMPTABLE END;" $stmt = oci_parse($conn, $sql); oci_execute($stmt); oci_free_statement($stmt); $sql = "SELECT ... FROM temptable"; $stmt = oci_parse($conn, $sql); oci_execute($stmt); while ($row = oci_fetch_assoc($stmt)) { ... } oci_free_statement($stmt); oci_close($conn);

Ce code ne contient aucune ligne. J'ai donc décidé de mettre la sélection dans un même aller-retour vers la base de données :

$conn = oci_connect(...); $sql = " BEGIN POPULATETEMPTABLE END; SELECT ... FROM temptable " $stmt = oci_parse($conn, $sql); oci_execute($stmt); while ($row = oci_fetch_assoc($stmt)) { ... } oci_free_statement($stmt); oci_close($conn);

Cela me donne l'erreur :

PLS-00103: Encountered the symbol "SELECT"

Si je mets le SELECT dans BEGIN ... END alors j'obtiens cette erreur :

PLS-00428: an INTO clause is expected in this SELECT statement

Comment exécuter une procédure stockée en PHP qui remplit une table temporaire puis y effectue une sélection ?

Cela fonctionne dans SQL Developer mais pas en PHP.

Utilisation :

PHP 8.1.4 Oracle 19.0.0.0.0

P粉551084295
P粉551084295

répondre à tous (1)
P粉432930081

Le premier problème vient de la définitionoci_execute()默认提交,因此调用POPULATETEMPTABLE插入的任何行都会被ON COMMIT DELETE ROWS 清除;.

Corrigez cela en remplaçant par :

$sql = "BEGIN POPULATETEMPTABLE END;" $stmt = oci_parse($conn, $sql); oci_execute($stmt, OCI_NO_AUTO_COMMIT);

Le deuxième problème lié à l'insertion d'un SELECT dans un bloc PL/SQL est qu'il s'agit d'un PL/SQL invalide. Utilisez des curseurs de référence ou des jeux de résultats implicites. Consultez la documentation OCI8 ou lesUnderground PHP et Oracle Manuals

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!