Frage : Zählung die Buchstaben-Länge eines langen Feldes - Störung

Hallo, versuche ich, die Länge der Felder zu zählen, die von einer langen Datenart sind.  Ich schrieb ein Funktion benanntes find_length2 und ich benenne es von einem anderen Verfahren.  Es funktioniert, aber schließlich Störungen nach 500.000 Plusreihen und sagt „ORA-06502: PL/SQL: numerische oder Wertstörung“.  Bitte help.

I morgens eine Kopie der find_lenth Funktion und des Verfahrens einschließend, die ich pflege, um es zu nennen below.

Thanks much.

Find Längen-Funktion:
CREATE oder ERSETZEN Funktion Find_Length2
(geo_log_id Zahl)
RETURN number
IS
long_var LANGES;
BEGIN
long_desc IN long_var
vom logs
IN DEM log_id = geo_log_id VORWÄHLEN;
Rückhollänge (long_var);
END;
/
Procdure, zum der Funktion zu benennen:
CREATE ODER VERFAHREN GEO_COUNT_DB_LONG_SIZE
is
cursor log_id_cursor is
auserwähltes log_id vom logs
in dem sti_casetype innen ERSETZEN (
sti_casetype
vom ford_acs_casetypes
in dem transition_phase = 'DB'< Br/> und ford_contact_type_cd <> 'B'< Br/> vorwählen);
local_log_id Zahl;
/* long_desc_length Nr. (20.0); */
long_desc_length Zahl;
begin
öffnen log_id_cursor;
Reichweite log_id_cursor in local_log_id;
, während log_id_cursor%found
loop
in long_desc_length von den Maschinenbordbüchern IN DENEN LOG_ID = local_log_id vorwählen;
Einsatz in (case_no, field_size), Werte geo_field_count2 (local_log_id, long_desc_length);
legen fest;
Reichweite log_id_cursor in local_log_id;
Endenschleife;
Ende;
/

Error angetroffen nachdem Sein erfolgreich auf 500.000 Plusreihen:

SQL> beschneiden Tabelle geo_field_count2;

Table truncated.

SQL> exec geo_count_db_long_size;
BEGIN geo_count_db_long_size; ENDE;

*
ERROR an Linie 1:
ORA-06502: PL/SQL: numerisches oder Wert error
ORA-06512: „SCOPUS1_APP.FIND_LENGTH2 " am , Linie 7
ORA-06512: „SCOPUS1_APP.GEO_COUNT_DB_LONG_SIZE " am , Linie 19
ORA-06512: an der Linie 1


SQL>



Antwort : Zählung die Buchstaben-Länge eines langen Feldes - Störung

ja können wir das definitiv tun, aber vorher ließ das uns hinzufügen ausprüfen/Maschinenbordbuchmitteilungen zum Funktionscode außerdem zum unerstand, das Linie der Störung. gibt. Den below Code wieder verwenden eine Ausführung der Test und mich geben, den die Maschinenbordbuchmitteilung ausgab, was Sie auf dem Schirm erhalten.

VERFAHREN GEO_COUNT_DB_LONG_SIZE VERURSACHEN ODER ERSETZEN
ist
Cursor log_id_cursor ist
  to_char (log_id) von den Maschinenbordbüchern vorwählen
        wo sti_casetype innen (
                                      sti_casetype vorwählen
                                            von den ford_acs_casetypes
                                            wo transition_phase = „DB“
                                            );
  local_log_id Zahl;
  /* long_desc_length Nr. (20.0); *
  long_desc_length Zahl;
  my_err varchar2 (100);
anfangen
  log_id_cursor öffnen;
  log_id_cursor in local_log_id holen;
   my_err: = ' nach fetch';
          während log_id_cursor%found
           Schleife
      my_err: = ' vor dem Funktionsanruf, zum von length'; zu erhalten
  find_length3 (local_log_id) in long_desc_length vorwählen von den Maschinenbordbüchern IN DENEN LOG_ID = local_log_id;
      my_err: = ' nach dem Funktionsanruf, zum von length'; zu erhalten
          Einsatz in (case_no, field_size), Werte geo_field_count2 (local_log_id, long_desc_length);
      my_err: = ' nach Einsatz zu anderem table';
       festlegen;
      log_id_cursor in local_log_id holen;
   Schleife beenden;
Ausnahme wenn andere dann
dbms_output.put_line ('ich bin in der Ausnahme: '|| my_err);
dbms_output.put_line ('Störung: '||sqlerrm);
dbms_output.put_line („Störungscode: “ || sqlcode);
Ende;
/

Funktion Find_Length3 (geo_log_id Zahl) verursachen oder ersetzen
  Zahl zurückbringen
ist
  clob x;
  y lang;
  my_err varchar2 (100);
anfangen
  dbms_lob.createtemporary (x, falsch);
my_err: = ' FUNKTION: nach createtemporary';
  long_desc in y von den Maschinenbordbüchern vorwählen in denen log_id = geo_log_id;
my_err: = ' FUNKTION: nach select';
   x: = to_clob (y);
my_err: = ' FUNKTION: nach to_clob';
  Rückholdbms_lob.getlength (x);
my_err: = ' FUNKTION: nach getlength';
 dbms_lob.freetemporary (x); --> erhält Anmerkung, diese nicht durchgeführt wie
-- dieses ist nach Rückgabeanweisung.

Ausnahme
  wenn andere dann
dbms_output.put_line ('Innerefunktionsausnahme: '|| my_err);
dbms_output.put_line ('Innerefunktionsstörung: '||sqlerrm);
dbms_output.put_line („Innerefunktions-Störungscode: “ || sqlcode);
Ende;
/
Weitere Lösungen  
 
programming4us programming4us