PHP 甲骨文全局临时表



----- 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((持久(和预言机(12c(全局临时表问题。有时数据无法返回空表。此问题仅在全局临时表中。我在Laravel中尝试了相同的问题,我再次配置了Oracle轮询相同的问题。

全局临时表中的数据仅在会话中可见。您使用的是 PHP 连接池 (ORCL:POOLED(,因此不同的调用可能会连接到不同的会话。这肯定会解释为什么会出现间歇性错误,这只会影响查询 GTT。

这是 Web 应用程序(无状态(和数据库(大量有状态(的常见问题。

至于修复它,也许你不需要连接池。但似乎更有可能的是,您最好不要使用 GTT。实际上,在很少有用例中,全局临时表值得填充和读取它们的开销。只需在需要时查询数据即可。

相关内容

  • 没有找到相关文章

最新更新