Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

usando EXECUTE IMMEDIATE com vários argumentos de ligação iguais


Há um comportamento "especial" no Oracle:Nomes de espaços reservados repetidos no SQL dinâmico Declarações

Em um Bloco Anônimo ou Instrução CALL não é necessário repetir os valores de ligação se os nomes forem iguais. Por exemplo, este Bloco 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;
/

Mas este EXECUTE IMMEDIATE plsql_block USING a, b; não funciona dentro de um procedimento .