PHP ORACLE GLOBAL TEMPORARY TABLE

—— PHP ———

<?php
$c = oci_new_connect("system", "1234", "127.0.0.1:1521/ORCL:POOLED");
oci_execute(oci_parse($c,"CALL pr_test()"));
$s = oci_parse($c, 'select * from GTT_TABLEs');
oci_execute($s);
oci_fetch_all($s, $res);
var_dump($res);
?>



--- Global Temporary Table ----
CREATE GLOBAL TEMPORARY TABLE "SYSTEM"."GTT_TABLES"(    "ID" NUMBER(10,0) NOT NULL ENABLE,
"FIRSTNAME" VARCHAR2(191 BYTE),
"LASTNAME" VARCHAR2(191 BYTE),
"EMAIL" VARCHAR2(191 BYTE),
"POINTS" VARCHAR2(191 BYTE),
"NOTES" VARCHAR2(191 BYTE),
"CREATED_AT" TIMESTAMP (6),
"UPDATED_AT" TIMESTAMP (6),
"AGE" NUMBER(10,0),
"JOB" VARCHAR2(191 BYTE),
"GENDER" VARCHAR2(191 BYTE),
"COUNTRY" VARCHAR2(191 BYTE),
"SALE_DATE" VARCHAR2(191 BYTE)
) ON COMMIT PRESERVE ROWS ;



--- PROCEDURE -----
create or replace PROCEDURE PR_TEST  AS
BEGIN
DELETE GTT_TABLED;
INSERT INTO GTT_TABLES (SELECT * FROM DATATABLES);
COMMIT;
END;

Php (7.2.1) (постоянный) и oracle (12c) Глобальная временная таблица Issue.Some Times Данные не могут быть возвращены Пустая таблица. Эта проблема только в Global Temporary Table. Я пробовал в Laravel, Codeigniter Та же проблема, и я снова настраиваю опрос Oracle тот же вопрос.

0

Решение

Данные в глобальной временной таблице видны только в течение сеанса. Вы используете пул соединений PHP (ORCL: POOLED), поэтому существует вероятность, что разные вызовы будут подключаться к разным сеансам. Это, безусловно, объясняет, почему у вас периодически возникает ошибка, которая влияет только на запросы GTT.

Это распространенная проблема с веб-приложениями (которые не имеют состояния) и базами данных (которые с большим состоянием).

Что касается исправления, возможно, вам не нужен пул соединений. Но более вероятно, что вам лучше не использовать GTT. На самом деле существует очень мало случаев использования, когда глобальные временные таблицы стоят затрат на их заполнение и чтение. Просто запросите данные, когда вам это нужно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]