我使用的是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;
答案 0 :(得分:0)
临时表中的数据仅对您的会话可见,因此 - 除了您之外没有人可以查看或使用它。那是你的情况吗?如果是这样,请切换到&#34; normal&#34;表;您需要一些额外的标识符,以帮助您区分不同用户之间的数据。
另外,我建议你不在SYSTEM(也不是SYS)模式中创建自己的对象,这是你目前正在做的事情。
答案 1 :(得分:0)
它的例子和打字错误。
--- 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;