Oracle
 sql >> Base de données >  >> RDS >> Oracle

en utilisant EXECUTE IMMEDIATE avec plusieurs mêmes arguments de liaison

Il existe un comportement "spécial" dans Oracle :Noms d'espace réservé répétés dans Dynamic SQL Déclarations

Dans un bloc anonyme ou une instruction CALL, il n'est pas nécessaire de répéter les valeurs de liaison si les noms sont égaux. Par exemple, ce bloc anonyme fonctionne :

DECLARE
  a NUMBER := 4;
  b NUMBER := 7;
  plsql_block VARCHAR2(100);
BEGIN
  plsql_block := 'BEGIN calc_stats(:x, :x, :y, :x); END;';
  EXECUTE IMMEDIATE plsql_block USING a, b;  -- calc_stats(a, a, b, a)
END;
/

Mais ce EXECUTE IMMEDIATE plsql_block USING a, b; ne fonctionne pas à l'intérieur d'une procédure .