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
448

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éfinition oci_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 les Underground 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!