2011-02-27 51 views
1

我想運行一個過程來強制行上的行鎖,但我不想將結果集返回給客戶端,也不想實際上想要更新任何東西。下面是PROC:運行Oracle過程只是爲了鎖定行而不返回結果集

CREATE OR REPLACE PROCEDURE SP_LOCK_Row 
(IDRow IN INTEGER) 
IS 
BEGIN 
    SELECT * 
    FROM TBLTable 
    WHERE IDRow = IDRow 
    FOR UPDATE; 
END; 

的問題是,我不斷收到錯誤:PLS-00428: an INTO clause is expected in this SELECT statement。有沒有辦法讓我鎖定行而不必將結果集返回給客戶端?在SQL Server相當於是:

CREATE PROCEDURE dbo.SP_LOCK_Row(
    @IDRow INT) 
AS 
SELECT * 
FROM dbo.TBLTable WITH (UPDLOCK, ROWLOCK) 
WHERE IDRow = @IDRow 

韓國社交協會

回答

6

我不知道它是多麼聰明,這樣的代碼,但這樣的:

CREATE OR REPLACE PROCEDURE SP_LOCK_Row 
(IDRow IN INTEGER) 
IS 
dummy varchar2(1); 
BEGIN 
    SELECT 'x' into dummy 
    FROM TBLTable 
    WHERE IDRow = IDRow 
    FOR UPDATE; 
END; 

應該做的伎倆。 羅納德 - http://ronr.blogspot.com

+0

答案Tks – Pascal 2011-02-27 16:01:10

+0

嗨帕斯卡爾,我很高興能夠爲您提供一個答案,你接受。 – 2011-02-27 16:38:03

+0

而且我更加高興! ;-) – Pascal 2011-02-27 17:16:51