Lo soluciona quitando la restricción de tamaño. No es ne eded:
create or replace function logMessage (msg in varchar2)
return number is
begin
null;
return 1;
end logMessage;
/
Supongo que su función es un poco más complicada que esto?
La sintaxis completa para la declaración create function
from the documentation es:
CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
{IS|AS}
Hay una gran cantidad de información en tornothe specifics si está interesado, pero se puede encontrar TECH on the Net más útil.
En respuesta a la primera pregunta de por qué no sé y no puedo encontrar una respuesta. Pero to quote APC:
Esto es molesto, pero es la forma en PL/SQL funciona por lo que tenemos que vivir con ella.
En pocas palabras, usted debe saber en tiempo de ejecución cuánto tiempo algo va a ser y poder, por lo tanto, para tratar con él. Hay algunas opciones que puede tener en cuenta sin embargo:
Si sabe cuál es la longitud que desee mensaje a ser usted puede definir una variable, el valor por defecto de los cuales es un substr
del parámetro:
create or replace function logmessage (msg in varchar2) return number is
l_msg varchar2(2000) := substr(msg,1,2000);
begin
return 1;
end;
Alternativamente , se puede comprobar la longitud de la propia función:
create or replace function logmessage (msg in varchar2) return number is
begin
if length(msg) > 2000 then
return 0;
end if;
return 1;
end;