SQL Plus-没有选择行错误;尽管数据已插入且没有任何错误

问题描述 投票:0回答:2

我是一个关于 SQL Plus 和 Oracle 10g 的新手。所以,请不要介意这些愚蠢的问题。

看,我面临的问题是,每当我对表发起查询时;

SELECT * FROM emp;

输出结果为“没有选择行”。

我陷入了完全的困境,因为表及其架构清晰地保留了下来,但我输入的数据没有显示。所有用户生成的表都会发生同样的情况。元组没有显示。这是与SQL Plus有关的问题吗??? 请帮助并给我正确的指导。

oracle10g sqlplus
2个回答
10
投票

在 Oracle 中,您发出的每条语句都是事务的一部分。 在另一个会话可以看到数据之前,需要提交这些事务(在这种情况下,更改将永久生效)或回滚(在这种情况下,更改将被还原)。 有些数据库要么不支持事务(即MySQL中的MyISAM表),要么不隐式启动事务(即SQL Server)。 Oracle 方法通常要优越得多 - 当您无意中运行了缺少重要谓词的

delete
语句时,当它删除了您期望的更多行时回滚操作的能力可以成为真正的职业保护者。

在 Oracle 中,当您运行了包含事务的任何语句并且您确信您的更改是正确的时,您需要显式发出

commit
以使这些更改对其他会话可见,即

SQL> insert into some_table( <<columns>> ) values( <<values>> );
SQL> insert into some_other_table( <<columns>> ) values ( <<more values>> );
SQL> commit;

如果您真的、真的、真的确定您更喜欢在其他工具中可能习惯的行为,您可以告诉 SQL*Plus 自动提交您的更改

SQL> set autocommit on;
SQL> <<do whatever>>

这通常是一个非常糟糕的主意。 您不必显式发出

commit
所获得的微小好处远远超过了确保其他会话不会看到处于不一致状态的数据的能力(即,如果您通过发出两个命令将资金从帐户 A 转移到帐户 B)更新报表时,您不希望有人看到两个帐户都有钱或两个帐户都没有钱的中间结果,并且如果事实证明所做的事情与您预期的不同,则能够回滚更改。


0
投票

创建表 World_Leaders( 2 名称字符(40), 3 个国家 char(40));

表已创建。

SQL> 插入 World_Leaders 值('纳伦德拉·莫迪','印度');

已创建 1 行。

SQL> insert into World_Leaders value('习近平','中国');

© www.soinside.com 2019 - 2024. All rights reserved.