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 .