Declaración MERGE con definición “WITH FUNCTION”
Estoy intentando usar una función declarada en una cláusula WITH en una sentencia MERGE.
Aquí está mi código:
create table test
(c1 varchar2(10),
c2 varchar2(10),
c3 varchar2(10));
insert into test(c1, c2) values ('a', 'A');
insert into test(c1, c2) values ('b', 'A');
select * from test;
begin
with function to_upper(val varchar2) return varchar is
begin
return upper(val);
end;
merge into test a
using (select * from test) b
on (upper(a.c1) = upper(b.c2))
when matched then
update set a.c3 = to_upper(a.c1);
end;
Pero estoy obteniendo este error:
Informe de error – ORA-06550: línea 2, columna 15: PL/SQL: ORA-00905:
falta palabra clave ORA-06550: línea 2, columna 1: PL/SQL: se ignora
la instrucción SQL ORA-06550: línea 6, columna 1: PLS-00103:
Se ha encontrado el símbolo “MERGE”
06550. 00000 – “línea %s, columna %s:\n%s”
*Causa: Normalmente un error de compilación PL/SQL.
*Acción:
¿Alguien puede explicar por qué no está funcionando, por favor?
Gracias,
davy.ai
El problema parece estar en la ubicación de la cláusula WITH. En Oracle, la cláusula WITH debe ir antes de la declaración SELECT o MERGE. Prueba mover la cláusula WITH encima de la declaración MERGE, así:
Al mover la cláusula WITH antes de la declaración MERGE, ahora podemos usar la función ‘to_upper’ dentro de la declaración MERGE. También debes tener en cuenta que debemos usar ‘to_upper’ en lugar de ‘upper’ en la cláusula ON, ya que ‘to_upper’ es el nombre de nuestra función.