Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden von EXECUTE IMMEDIATE mit mehreren gleichen Bindeargumenten

Es gibt ein "besonderes" Verhalten in Oracle:Wiederholte Platzhalternamen in Dynamic SQL Aussagen

In einem anonymen Block oder einer CALL-Anweisung ist es nicht erforderlich, die Bindungswerte zu wiederholen, wenn die Namen gleich sind. Zum Beispiel dieser anonyme Block funktioniert:

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

Aber dieses EXECUTE IMMEDIATE plsql_block USING a, b; funktioniert nicht innerhalb einer Prozedur .