Oracleには「特別な」動作があります。
匿名ブロックまたはCALLステートメントでは、名前が等しい場合はバインド値を繰り返す必要はありません。たとえば、この匿名ブロック 動作しています:
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;
/
ただし、このEXECUTE IMMEDIATE plsql_block USING a, b;
手順内では機能しません 。