为啥即使使用提交后 sql plus 也不会保存新行?
Posted
技术标签:
【中文标题】为啥即使使用提交后 sql plus 也不会保存新行?【英文标题】:Why would sql plus not save a new row even after using commit?为什么即使使用提交后 sql plus 也不会保存新行? 【发布时间】:2021-06-05 00:45:02 【问题描述】:我正在为我的班级学习 DML,并尝试插入新行并使用 oracle 18c。即使在我使用 commit 命令后,该行也没有保存。在我关闭 sql plus 窗口并再次打开它并输入后
SELECT*FROM acctmanager;
它仍然显示No rows selected.
可能是什么问题?
[在此处输入图片描述]
【问题讨论】:
在关闭sql plus之前可以访问commit后的行吗? 请发一个完整的插入示例,一个接一个地选择。您当前的问题根本不清楚,这种情况是不可重现的(我无法想象这是可能的) 我可以在提交之后和关闭之前访问该行。 如果在同一个 SQLPlus 窗口中再次尝试连接会怎样;比如select * ...
,然后是connect user/password@DB
,然后又是select * ...
?
请为您的对象添加前缀,例如 'insert into 我敢打赌,ACCTMANAGER 是一个全局临时表。这些是永久性数据结构,但任何数据仅在事务或会话期间持续存在,具体取决于表的创建方式。 Find out more.
我可以在提交之后和关闭之前访问该行。
这强烈表明该表是使用 ON COMMIT PRESERVE ROWS 子句创建的。
很容易检查:
select table_name, temporary
from user_tables
where table_name = 'ACCTMANAGER'
【讨论】:
听起来可能是这样,但这是 oracle 可以自动执行的操作,因为我没有设置它来执行此操作。这是我要使用的脚本: CREATE TABLE acctmanager (amid CHAR(4), amfirst VARCHAR2(12) NOT NULL, amlast VARCHAR2(12) NOT NULL, amedate DATE DEFAULT SYSDATE, amsal NUMBER(8,2), amcomm NUMBER(7,2) 默认 0,区域 CHAR(2),CONSTRAINT acctmanager_amid_pk PRIMARY KEY (amid),CONSTRAINT acctmanager_region_ck CHECK (region IN ('N', 'NW', 'NE', 'S', 'SE', 'SW', 'W', 'E'))); 不,Oracle 不会自动将普通表转换为 GTT。所以,我们这里有一个谜题。您断言数据库正在做一些奇怪的事情。但我们只能反驳说您的数据库没有在做一些奇怪的事情。几十年来,由于丢失了已提交的事务,Oracle 一直不是领先的企业 RDBMS。您更有可能误解正在发生的事情;您忽略了环境或配置中的一些怪癖。很遗憾,我们无法为您提供更多帮助。 这很有可能,因为我对此很陌生。我很感激帮助。我也会继续学习。谢谢!以上是关于为啥即使使用提交后 sql plus 也不会保存新行?的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使我们尝试获取数据而不是更新/提交新数据,GraphQL 也会查询 POST 请求?