2013-04-17 77 views
0

我們是否可以爲UPDATE查詢聲明並打開一個遊標呢,還是僅用於SELECT查詢?我們可以使用遊標進行UPDATE查詢嗎?

EXEC SQL PREPARE S FROM :query; 
    EXEC SQL DECLARE C CURSOR FOR S; 
    DbUtilT::set_bind_variables(bind_dp,&paramList); 
    EXEC SQL OPEN C USING DESCRIPTOR bind_dp; 
    EXEC SQL WHENEVER NOT FOUND GOTO end_update_loop; 
    EXEC SQL FETCH C USING DESCRIPTOR bind_dp; 
    EXEC SQL COMMIT WORK; 

這樣好嗎?或者我們應該只對SELECT語句使用遊標,那麼我們如何執行UPDATE查詢?

+0

這是在Pro * C嗎? –

+0

@Alex - 是的,這是在Pro * C – user862833

回答

1

如果query是一樣的東西:

SELECT id FROM mytable WHERE ... FOR UPDATE OF id 

那麼你可以做:

... 
EXEC SQL FETCH C USING DESCRIPTOR bind_dp; 
EXEC SQL UPDATE mytable SET id = <something> WHERE CURRENT OF C; 

我不太清楚你的意思了;您不必使用光標進行更新,您可以這樣做:

EXEC SQL UPDATE mytable SET id = <something> WHERE ...; 

...或等效的預備聲明。

我完全誤解了這個問題嗎?

+0

雅這是正確的,當我們沒有在查詢中綁定變量。 如果我使用查詢綁定變量.. 更新設置 =:BIND_VAR1其中 =:BINDVAR2和 =:BINDVAR3 如何去用? – user862833

相關問題