2014-05-09 65 views
0

任何人都可以在這方面幫助。我正在嘗試使用與按鈕相關的動態操作在APEX中執行此代碼。只是做餐桌上的簡單更新,但我的PL/SQL薄弱;)EXECUTE直接和SQL更新

DECLARE 
sql_stmt VARCHAR2(200); 
BEGIN 
EXECUTE IMMEDIATE sql_stmt := 
'update dos_visits set visit_type = 'IMV'where  visit_type = 'SMV'' 
END; 

我得到一個誤差=這個..

非常感謝!

+0

變「SMV」到「SMV」,你應該通過 – Satya

+0

@Satya,那是有點不清楚和犯規手柄'IMV',壽其正確答案。只需將其作爲答案發布即可。 – paqogomez

回答

1

在PL/SQL中,字符串單引號需要進行轉義,使得PL/SQL引擎知道你要表示一個單引號沒有結束串的存在。如果你想使用一個變量sql_stmt,你想也需要分配從EXECUTE IMMEDIATE調用單獨的步驟中值變量。

這將工作(注意,這是兩個連續的單引號,而不是單一的雙引號字符)

DECLARE 
    sql_stmt VARCHAR2(200); 
BEGIN 
    sql_stmt := 'update dos_visits set visit_type = ''IMV'' where visit_type = ''SMV'''; 
    EXECUTE IMMEDIATE sql_stmt; 
END; 

似乎沒有,然而,以任何理由在這裏使用動態SQL。它通常會更有意義使用靜態SQL

BEGIN 
    update dos_visits 
    set visit_type = 'IMV' 
    where visit_type = 'SMV'; 
END; 

如果你要使用動態SQL出於某種原因,你可能會想使用綁定變量在查詢中,除非這些visit_type值真的是硬編碼。

DECLARE 
    sql_stmt VARCHAR2(200); 
BEGIN 
    sql_stmt := 'update dos_visits set visit_type = :1 where visit_type = :2'; 
    EXECUTE IMMEDIATE sql_stmt 
    USING 'IMV', 'SMV'; 
END; 
+0

嗨,真的很欣賞這裏的快速答案。感謝您的幫助。問題是當我在APEX中運行它時,它根本沒有更新,列是正確的,值是正確的,表是正確的。不知道這是絆倒。 – Ewaver

+1

@Ewaver - 您是否承諾更新所做的更改? –

+0

oK ALL GOOD ...對不起。我需要先在DEV中做一個承諾;)再次感謝..大時間! – Ewaver