a risolvere il problema rimuovendo il vincolo di dimensioni non è ne.. eded:
create or replace function logMessage (msg in varchar2)
return number is
begin
null;
return 1;
end logMessage;
/
Immagino che la tua funzione sia leggermente più complicata di questa?
La sintassi completa per il create function
dichiarazione from the documentation è:
CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
{IS|AS}
C'è un sacco di informazioni in tutto the specifics se siete interessati, ma si possono trovare TECH on the Net più utile.
In risposta alla tua prima domanda di perché non so e non riesce a trovare una risposta. Ma to quote APC:
Questo è fastidioso, ma è il modo in PL/SQL funziona così dobbiamo vivere con esso.
In parole povere, si dovrebbe sapere a run-time per quanto tempo qualcosa sta per essere ed essere in grado, quindi, a che fare con esso. Ci sono alcune opzioni che si possono prendere in considerazione però:
Se sai cosa lunghezza desiderata messaggio per essere che si può definire una variabile, il valore di default dei quali è un substr
del parametro:
create or replace function logmessage (msg in varchar2) return number is
l_msg varchar2(2000) := substr(msg,1,2000);
begin
return 1;
end;
alternativa , è possibile controllare la lunghezza nella funzione stessa:
create or replace function logmessage (msg in varchar2) return number is
begin
if length(msg) > 2000 then
return 0;
end if;
return 1;
end;