我有一箇舊的客戶端軟件,它有一個連接的oracle數據庫用於持久化。作爲接口,客戶端軟件只允許調用函數和過程。我幾乎可以完全訪問數據庫,即我可以定義函數和過程。由於接口,只有函數可以返回值,我不能使用過程的參數選項OUT
。函數調用中的DML
現在我只是想讀從表中的值:
SELECT value FROM myTable WHERE id = 42;
,又重新增加值:
UPDATE myTable SET value = value + 1 WHERE id = 42;
我可以用一個函數的SELECT語句,併爲一個程序更新並連續呼叫。這裏的問題是客戶端不存在交易。因此,在select和update之間另一個線程可能會得到錯誤的值。
所以我的問題是,我該如何使用在交易雙方通話,而無需使用交易...
嘗試的途徑:
- 使用匿名PL/SQL塊 - >語法不受客戶支持。
- 將兩個調用放在一個函數中 - >在select語句中不允許DML。
PRAGMA AUTONOMOUS_TRANSACTION
- >我聽說這是一件壞事,不應該使用。
'Functions'旨在*** ***不是有副作用。如果你想要改變數據庫的狀態,那麼你需要使用'Procedure'。 – MatBailie
如果你想要一個簡單的'計數器',並且在這種情況下沒有其他事情發生,你可以考慮'CREATE SEQUENCE'? – MatBailie
如果我使用過程(並且不能使用'OUT'),我需要兩個不是線程保存的數據庫調用 – Thanthla