sql >> Base de Datos >  >> RDS >> Oracle

usando EXECUTE IMMEDIATE con múltiples argumentos de enlace iguales

Hay un comportamiento "especial" en Oracle:Nombres de marcador de posición repetidos en SQL dinámico Declaraciones

En un bloque anónimo o declaración CALL no es necesario repetir los valores de vinculación si los nombres son iguales. Por ejemplo, este bloque anónimo está funcionando:

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;
/

Pero este EXECUTE IMMEDIATE plsql_block USING a, b; no funciona dentro de un Procedimiento .