Questione : Contando la lunghezza del carattere di un campo lungo - errore

Ciao, sto provando a contare la lunghezza dei campi che sono di un tipo di dati lungo.  Ho scritto un find_length2 denominato funzione e lo denomino da un'altra procedura.  Funziona, ma finalmente errori dopo 500.000 file più e dice “ORA-06502: PL/SQL: errore di valore o numerico„.  Prego help.

I che acclude una copia della funzione del find_lenth e della procedura che sto usando per denominarlo funzione di lunghezza di below.

Thanks much.

Find: il
CREATE o SOSTITUISCE LUNGO long_var del number
IS
del
RETURN di funzione Find_Length2
(numero del geo_log_id); il
BEGIN
SELEZIONA il long_desc in long_var
A PARTIRE da logs
IN CUI log_id = geo_log_id; lunghezza di ritorno del
(long_var);
END;
/
Procdure per denominare la funzione: il
CREATE O SOSTITUISCE il log_id prescelto del is
di log_id_cursor di GEO_COUNT_DB_LONG_SIZE
is
cursor di PROCEDURA da logs
in cui sti_casetype dentro (
seleziona lo sti_casetype
a partire da ford_acs_casetypes
in cui transition_phase = 'Br/> del DB'< e Br/> del B'< del <> del ford_contact_type_cd '); numero del local_log_id del
; long_desc_length numero (20.0) del
/*; numero del long_desc_length di */
; il
begin
apre il log_id_cursor; log_id_cursor di ampiezza del
in local_log_id;
mentre il loop
di log_id_cursor%found
seleziona find_length2 (local_log_id) il in long_desc_length a partire dai ceppi IN CUI LOG_ID = local_log_id; inserto del
(case_no, field_size) nei valori geo_field_count2 (local_log_id, long_desc_length); il
commette; log_id_cursor di ampiezza del
in local_log_id; ciclo dell'estremità del
; estremità del
;
/

Error incontrato dopo essere riuscito su 500.000 file più: il

SQL> tronca la tabella geo_field_count2;

Table truncated.

SQL> exec geo_count_db_long_size;il
BEGIN geo_count_db_long_size; ESTREMITÀ;

*
ERROR alla linea 1:
ORA-06502: PL/SQL: error
ORA-06512 di valore o numerico: “SCOPUS1_APP.FIND_LENGTH2 " a , linea 7
ORA-06512: “al di SCOPUS1_APP.GEO_COUNT_DB_LONG_SIZE ", linea 19
ORA-06512: alla linea



di 1


SQL> class= del

Risposta : Contando la lunghezza del carattere di un campo lungo - errore

sì possiamo definitivamente fare quello ma prima quello ha lasciato noi aggiungere mette a punto/messaggi di ceppo al codice di funzione pure a unerstand che la linea sta dando all'errore. Usare ancora il codice sotto un'effettuazione la prova e darlo che il messaggio di ceppo ha prodotto che cosa state ottenendo sullo schermo.

GENERARE O SOSTITUIRE LA PROCEDURA GEO_COUNT_DB_LONG_SIZE
è
il log_id_cursor del cursore è
  selezionare to_char (log_id) a partire dai ceppi
        dove sti_casetype dentro (
                                      selezionare lo sti_casetype
                                            dai ford_acs_casetypes
                                            dove transition_phase = “DB„
                                            );
  numero del local_log_id;
  long_desc_length numero (20.0) di/*; */
  numero del long_desc_length;
  my_err varchar2 (100);
cominciare
  aprire il log_id_cursor;
  andare a prendere il log_id_cursor in local_log_id;
   my_err: = ' dopo fetch';
          mentre log_id_cursor%found
           ciclo
      my_err: = ' prima della chiamata di funzione per ottenere length';
  selezionare find_length3 (local_log_id) in long_desc_length a partire dai ceppi IN CUI LOG_ID = local_log_id;
      my_err: = ' dopo la chiamata di funzione per ottenere length';
          inserto (case_no, field_size) nei valori geo_field_count2 (local_log_id, long_desc_length);
      my_err: = ' dopo l'inserto all'altro table';
       commettere;
      andare a prendere il log_id_cursor in local_log_id;
   concludere il ciclo;
eccezione quando altre allora
dbms_output.put_line ('sono nell'eccezione: '|| my_err);
dbms_output.put_line ('errore: '||sqlerrm);
dbms_output.put_line (“codice di errore: „ || sqlcode);
estremità;
/

generare o sostituire la funzione Find_Length3 (numero del geo_log_id)
  restituire il numero
è
  clob x;
  y lungamente;
  my_err varchar2 (100);
cominciare
  dbms_lob.createtemporary (x, false);
my_err: = ' FUNZIONE: dopo createtemporary';
  selezionare il long_desc in y a partire dai ceppi in cui log_id = geo_log_id;
my_err: = ' FUNZIONE: dopo select';
   x: = to_clob (y);
my_err: = ' FUNZIONE: dopo to_clob';
  dbms_lob.getlength di ritorno (x);
my_err: = ' FUNZIONE: dopo getlength';
 dbms_lob.freetemporary (x); --> la nota, questa non otterrà eseguita As
-- ciò è dopo la dichiarazione di ritorno.

eccezione
  quando altri allora
dbms_output.put_line ('eccezione di funzione della parte interna: '|| my_err);
dbms_output.put_line ('errore di funzione della parte interna: '||sqlerrm);
dbms_output.put_line (“codice di errore di funzione della parte interna: „ || sqlcode);
estremità;
/
Altre soluzioni  
 
programming4us programming4us