Проблема PHP Oracle с глобальной временной таблицей - PullRequest
0 голосов
/ 05 июня 2018

Я использую PHP 7.21 и Oracle 12c.У меня проблема с глобальной временной таблицей.Иногда данные возвращают пустую таблицу, и у меня возникает эта проблема только с временными таблицами.Я пробовал в Laravel и CodeIgniter, но проблема остается.Есть ли в моем коде ниже что-то, что является явной проблемой?

Код 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);   

Код SQL:

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Это тоже пример и ошибка при печати. ​​

--- Global Temporary Table ----
CREATE GLOBAL TEMPORARY TABLE "GSFIN"."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 GSFIN.GTT_TABLES;
INSERT INTO GSFIN.GTT_TABLES (SELECT * FROM GSFIN.DATATABLES);
COMMIT;
END;
0 голосов
/ 05 июня 2018

Данные во временных таблицах видны только вашей сессии, поэтому - никто, кроме вас, не может их видеть и использовать.Это твой случай?Если так, переключитесь на «нормальные» таблицы;вам понадобится дополнительный идентификатор, который поможет вам различать данные среди разных пользователей.

Кроме того, я бы предложил вам , а не для создания ваших собственных объектов в схемах SYSTEM (или SYS),что вы сейчас делаете.

...