【问题标题】:Oracle Database: SQL Query have different behavior in different environmentOracle 数据库:SQL 查询在不同的环境中有不同的行为
【发布时间】:2016-04-14 08:11:17
【问题描述】:

我正在尝试在两个“Oracle SQL Developer”中执行以下 SQL 查询。每个在不同的环境(本地/客户端)。

查询:

SELECT DISTINCT t.*
FROM myTable t
WHERE (:P_STATUS = -1 OR t.STATUS = :P_STATUS);

参数:
P_STATUS = -1 'Integer'(显示表格中的所有数据)

预期结果:
显示表格中的所有记录

结果:
本地:显示表中的所有记录
客户:表格中没有显示记录

注意:
1-以下查询中没有出现问题

SELECT DISTINCT t.*
FROM myTable t
WHERE :P_STATUS = -1) ;
SELECT DISTINCT t.*
FROM myTable t
WHERE (:P_STATUS = -1 OR 1=2);

2- 它昨天已经在客户端执行得很好,但今天却出现了这种奇怪的行为。所以我认为配置发生了变化,但我不能指望它或在谷歌中找到任何类似的问题。

3- 当我选择特定状态(:P_STATUS = 2)时,查询也执行得很好。

更新: 如果我从表中选择,查询运行正确,但是当从表的视图中选择时,它不返回任何数据。

在 Toad 中也运行正确,但在 SQL Developer 中运行不正确。

状态数据类型存在问题。在表号 (2) 和视图中 但以下查询使其在 SQL Developer 上运行

SELECT DISTINCT t.*
FROM myTable t
WHERE (:P_STATUS = -1 OR to_number(t.STATUS) = :P_STATUS);

【问题讨论】:

  • 客户端和本地是否都连接到同一个数据库?它们是否都连接到同一个用户 (SELECT USER FROM DUAL) 和表空间 (SELECT table_name, tablespace_name FROM user_tables WHERE table_name = 'MYTABLE')?如果您从两者中使用DESCRIBE myTable;,它们的描述是否相同?

标签: oracle


【解决方案1】:

如果数据已从本地计算机上的会话中INSERTed,但尚未COMMITted,则它将仅在该会话中可见(处于未提交状态)。尝试 SELECT 来自另一个会话(即客户端)的数据不会显示任何结果。

为了解决这个问题,COMMIT 本地会话中的数据。

【讨论】:

  • 数据已经提交,如果我进入不同的状态(例如:P_STATUS = 2),表格会返回数据。
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
相关资源
最近更新 更多