2016-04-14 27 views
2

我試圖在兩個'Oracle SQL Developer'中執行以下SQL查詢。每個環境在不同的環境(本地/客戶端)。Oracle數據庫:SQL查詢在不同環境下有不同的行爲

查詢:

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

的參數:
P_STATUS = -1 'Integer'(顯示錶中的所有數據)

預期的結果:
在表中的所有記錄顯示

的結果:
本地:顯示錶中的所有記錄
C lient:表中沒有記錄顯示

注:
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); 
+1

客戶端和本地連接到同一個數據庫嗎?它們是否都連接到同一個用戶('SELECT USER FROM DUAL')和表空間('SELECT table_name,tablespace_name FROM user_tables WHERE table_name ='MYTABLE'')?如果你使用'DESCRIBE myTable',那麼它們是否有相同的描述? – MT0

+0

與EBS一起嗎? –

回答

0

運行。如果該數據已經INSERT編輯從本地計算機上的會話,但一直沒有COMMIT泰德那麼它會只能在該會話中可見(處於未提交狀態)。嘗試SELECT來自另一個會話(即客戶端)的數據不會顯示任何結果。

爲了解決這個問題,在本地會話中的數據爲COMMIT

+0

數據已經提交,如果我輸入不同的狀態(例如:P_STATUS = 2),表格將返回數據。 –