Oracle
 sql >> Database >  >> RDS >> Oracle

utilizzando ESEGUI IMMEDIATO con più argomenti di collegamento uguali

Esiste un comportamento "speciale" in Oracle:Nomi segnaposto ripetuti in SQL dinamico Dichiarazioni

In un blocco anonimo o in un'istruzione CALL non è necessario ripetere i valori di collegamento se i nomi sono uguali. Ad esempio questo blocco anonimo sta funzionando:

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

Ma questo EXECUTE IMMEDIATE plsql_block USING a, b; non funziona all'interno di una procedura .