我試圖編寫過程而不直接使用鎖定語句。在存儲過程中更新後選擇
SET TERM^;
ALTER PROCEDURE PROC_GETSTATUS (
IDTBL1 Integer)
RETURNS (
STATUS Varchar(255))
AS
declare variable t int;
BEGIN
t=gen_id(RPUSING,1);
update TBL1 a set a.STATUS=cast('USINGBY' as varchar(255))||cast(:t as varchar(255)) where a.STATUS='free' and a.ID=:IDTBL1 order by a.LASTUPDATED rows 1 to 1;
STATUS=cast('USINGBY' as varchar(255))||cast(:t as varchar(255));
SUSPEND;
END^
SET TERM ;^
GRANT EXECUTE
ON PROCEDURE PROC_GETSTATUS TO SYSDBA;
當我從這個喜歡選擇通過查詢數據:
select * from TBL1 a where a.STATUS in (select b.STATUS from PROC_GETSTATUS(1));
返回null。但是這個選擇
select * from TBL1 a where a.STATUS like '%USINGBY%'
在當前事務中返回更新的數據。如何通過在當前事務中選擇一個過程來重寫此查詢?
什麼,當你刪除'SUSPEND'發生,這不是一個可選的存儲過程(或至少:它不應該是),可能現在由於「SUSPEND」而可以選擇的事實是造成這個問題的原因。 –
當我刪除SUSPEND時,我不知道如何使用執行過程語句返回的數據。 (它不可選)。我嘗試在TBL1字段中包含(從TBL1 a中選擇*,其中a.STATUS = ...)並返回,但它也返回null。 –