Jalankan prosedur tersimpan yang mengisi jadual sementara dan kemudian memilih daripada jadual sementara
P粉551084295
P粉551084295 2023-09-09 14:20:33
0
1
373

Saya mempunyai prosedur tersimpan yang mengisi jadual sementara global.

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

Saya mahu menjalankan prosedur tersimpan dan memilih baris yang ditambahkan pada jadual temp.

$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);

Kod ini tidak mendapat sebarang baris. Jadi saya memutuskan untuk meletakkan pemilihan dalam perjalanan pergi dan balik yang sama ke pangkalan data:

$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);

Ini memberi saya ralat:

PLS-00103: Encountered the symbol "SELECT"

Jika saya meletakkan SELECT di dalam BEGIN ... END maka saya mendapat ralat ini:

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

Bagaimana untuk menjalankan prosedur tersimpan dalam PHP yang mengisi jadual sementara dan kemudian memilih daripadanya?

Ia berfungsi dalam SQL Developer tetapi tidak dalam PHP.

Gunakan:

PHP 8.1.4
Oracle 19.0.0.0.0

P粉551084295
P粉551084295

membalas semua(1)
P粉432930081

Masalah pertama adalah kerana definisi oci_execute() 默认提交,因此调用 POPULATETEMPTABLE 插入的任何行都会被 ON COMMIT DELETE ROWS 清除;.

Betulkan ini dengan menukar kepada:

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

Masalah kedua dengan meletakkan SELECT ke dalam blok PL/SQL adalah kerana ini adalah PL/SQL yang tidak sah. Gunakan kursor rujukan atau set hasil tersirat. Lihat dokumentasi OCI8 atau Underground PHP dan Oracle Manuals

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!