2014-05-09 4 views
0

Quelqu'un peut-il aider avec ceci. J'essaie d'exécuter ce code dans APEX en utilisant une action dynamique associée à un bouton. Juste essayer de faire un simple mise à jour sur la table, mais mon Pl/SQL est faible;)EXECUTE immédiate et mise à jour SQL

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

Je reçois une erreur avec = pour cette ..

Merci beaucoup!

+0

changement « SMV » à « SMV » et vous devriez être à travers – Satya

+0

@Satya, thats un peu floue et ne marche pas poignée 'IMV', quoique sa bonne réponse. Juste poster comme une réponse. – paqogomez

Répondre

1

En PL/SQL, les guillemets simples dans les chaînes doivent être échappés pour que le moteur PL/SQL sache que vous souhaitez indiquer la présence d'un guillemet simple pour ne pas terminer la chaîne. Si vous souhaitez utiliser une variable sql_stmt, vous devez également affecter la valeur à cette variable dans une étape distincte de l'appel EXECUTE IMMEDIATE.

Cela fonctionne (notez que ces deux guillemets simples consécutifs, pas un caractère double guillemet simple) pour être une raison d'utiliser SQL dynamique ici cependant,

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

Il ne semble pas,. Il serait généralement plus judicieux d'utiliser SQL statique

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

Si vous allez utiliser SQL dynamique pour une raison quelconque, vous voudrez probablement utiliser des variables de grippage dans votre requête, sauf si ces visit_type valeurs sont vraiment codées en dur .

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

Salut, vraiment apprécier la réponse rapide ici. Merci pour votre aide avec la syntaxe. La chose est quand je cours ceci dans APEX, il ne met pas à jour du tout, la colonne est correcte, les valeurs sont correctes, la table est correcte. Je ne sais pas où cela se déclenche. – Ewaver

+1

@Ewaver - commettez-vous la modification apportée par la mise à jour? –

+0

oK TOUS BON ... désolé.J'ai besoin de faire un committ dans DEV d'abord;) merci encore .. grand temps! – Ewaver