   *        kann optional ein Parameter P_DELIMITER als Trennzeichen zwischen den
   *        einzelnen Zeilen uebergeben werden.
   */
-  PROCEDURE generate_text(p_template  IN VARCHAR2,
-                          p_cursor    IN OUT NOCOPY SYS_REFCURSOR,
-                          p_result    OUT VARCHAR2,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-
-  /* Prozedur zur Generierung von Texten basierend auf einem dynamischen Template
-  * %param p_cursor Geoffneter Cursor mit einer oder mehreren Ergebniszeilen,
-  *                 Diese Ueberladung erwartet das Template, in das die Anker
-  *                 eingef�gt werden sollen, als erste Spalte
-  * %param p_result Ergebnis der Umwandlung
-  * %param p_delimiter Abschlusszeichen, das zwischen die einzelnen Instanzen der
-  *        aufbereiteten Templates gestellt wird
-  * %usage Wird verwendet, um direkt aus einer SQL-Anweisung und einem Template
-  *        einen Ergebnistext zu erzeugen. Umfasst die SQL-Anweisung mehrere Zeilen,
-  *        kann optional ein Parameter P_DELIMITER als Trennzeichen zwischen den
-  *        einzelnen Zeilen uebergeben werden.
-  *        Da kein Template uebergeben wird, erwartet diese Ueberladung das 
-  *        Template als erste Spalte der SQL-Anweisung. Die SQL-Anweisung muss
-  *        alle Ersetzungsanker in allen uebergebenen Templates fuellen koennen.
-  */
-  PROCEDURE generate_text(p_cursor    IN OUT NOCOPY SYS_REFCURSOR,
-                          p_result    OUT VARCHAR2,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-
-  /* Prozedur zur Generierung von Texten basierend auf einem dynamischen Template
-  * %param SQL-Anweisung mit einer Spalte pro Ersetzungsanker. Nicht auf eine Zeile limitiert.
-  *                 Diese Ueberladung erwartet das Template, in das die Anker
-  *                 eingef�gt werden sollen, als erste Spalte
-  * %param p_result Ergebnis der Umwandlung
-  * %param p_delimiter Abschlusszeichen, das zwischen die einzelnen Instanzen der
-  *        aufbereiteten Templates gestellt wird
-  * %usage Wird verwendet, um direkt aus einer SQL-Anweisung und einem Template
-  *        einen Ergebnistext zu erzeugen. Umfasst die SQL-Anweisung mehrere Zeilen,
-  *        kann optional ein Parameter P_DELIMITER als Trennzeichen zwischen den
-  *        einzelnen Zeilen uebergeben werden.
-  *        Da kein Template uebergeben wird, erwartet diese Ueberladung das 
-  *        Template als erste Spalte der SQL-Anweisung. Die SQL-Anweisung muss
-  *        alle Ersetzungsanker in allen uebergebenen Templates fuellen koennen.
-  */
-  PROCEDURE generate_text(p_stmt      IN CLOB,
-                          p_result    OUT CLOB,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-
-  PROCEDURE generate_text(p_stmt      IN CLOB,
-                          p_result    OUT dbms_sql.varchar2a,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-                          
-  PROCEDURE generate_text(p_cursor    IN OUT NOCOPY sys_refcursor,
-                          p_result    OUT dbms_sql.varchar2a,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-
-  PROCEDURE generate_text(p_cursor    IN OUT NOCOPY sys_refcursor,
-                          p_result    OUT clob_table,
-                          p_delimiter IN VARCHAR2 DEFAULT NULL);
-                          
-  FUNCTION generate_text(p_cursor    IN SYS_REFCURSOR,
-                         p_delimiter IN VARCHAR2 DEFAULT NULL) RETURN CLOB;
-
-  FUNCTION generate_text(p_stmt      IN CLOB,
-                         p_delimiter IN VARCHAR2 DEFAULT NULL) RETURN CLOB;
-
-END code_generator;
+  procedure generate_text(p_template  in varchar2,
+                          p_cursor    in out nocopy sys_refcursor,
+                          p_result    out varchar2,
+                          p_delimiter in varchar2 default null,
+                          p_indent    in number default 0);
+                          
+  procedure generate_text(p_cursor    in out nocopy sys_refcursor,
+                          p_result    out dbms_sql.clob_table,
+                          p_delimiter in varchar2 default null,
+                          p_template  in varchar2 default null,
+                          p_indent    in number default 0);
+                          
+  -- Ueberladung als Funktion
+  function generate_text(p_cursor    in sys_refcursor,
+                         p_delimiter in varchar2 default null,
+                         p_template  in varchar2 default null,
+                         p_indent    in number default 0) return clob;
+                         
+                        
+  --Methoden zur Erzeugung von Listen von CLOBs                        
+  procedure generate_text_table(p_cursor    in out nocopy sys_refcursor,
+                                p_result    out clob_table,
+                                p_delimiter in varchar2 default null,
+                                p_template  in varchar2 default null,
+                                p_indent    in number default 0);
+                          
+  -- Ueberladung als Funktion
+  function generate_text_table(p_cursor    in sys_refcursor,
+                               p_delimiter in varchar2 default null,
+                               p_template  in varchar2 default null,
+                               p_indent    in number default 0) return clob_table;
+
+end code_generator;
 /

   *        kann optional ein Parameter P_DELIMITER als Trennzeichen zwischen den
   *        einzelnen Zeilen uebergeben werden.
   */
  PROCEDURE generate_text(p_template  IN VARCHAR2,
                          p_stmt      IN CLOB,
                          p_result    OUT VARCHAR2,
                          p_delimiter IN VARCHAR2 DEFAULT NULL);

  /* Prozedur zum direkten Ersetzen von Zeichenfolgen in einem Template durch die 
  * Ergebnisse der SQL-Abfrage
  * %param p_template Template mit Ersetzungsankern. Syntax der Ersetzungsanker:
  *        #<Name des Ersetzungsankers, muss Tabellenspalte entsprechen>
  *        |<Pr�fix, falls Wert not null>
  *        |<Postfix, falls Wert not null>
  *        |<Wert, falls NULL>#
  *        Alle PIPE-Zeichen und Klauseln sind optional, muessen aber, wenn sie 

  procedure set_secondary_anchor_char(p_char in varchar2);
  
  function get_secondary_anchor_char return varchar2;
                               
  
  /* BULK_REPLACE-Methode mit den gleichen Moeglichkeiten der Ersetzung wie GENERATE_TEXT
   * %param  p_template  Template mit Ersetzungsankern. Syntax der Ersetzungsanker:
   *                     #<Name des Ersetzungsankers, muss Tabellenspalte entsprechen>
   *                     |<Praefix, falls Wert not null>
   *                     |<Postfix, falls Wert not null>
   *                     |<Wert, falls NULL># 
   *                     Alle PIPE-Zeichen und Klauseln sind optional, muessen aber, wenn sie 
   *                     verwendet werden, in dieser Reihenfolge eingesetzt werden.
   *                     Beispiel: #VORNAME||, |# => Falls vorhanden wird hinter dem Vornamen ein Komma eingefuegt
   *                     Soll innerhalb einer Ersetzungszeichenfolge ein Anker verwendet werden, muss dieser
   *                     abweichend durch eine Tilde (~) maskiert werden. Auf diese Weise kann ein Anker im 
   *                     auf einen weiteren Anker verweisen.
   *                     Beispiel: #NACHNAME||, |~VORNAME~# => Liefert, Vorname, falls Nachname NULL
   * %param  p_chunks    Liste von Ankern und Ersetzungszeichen im Wechsel
   * %param [p_indent]   Optionale Angabe einer Einrueckung
   * %return CLOB mit dem ersetzten Text
   */
  function bulk_replace(
    p_template in clob,
    p_chunks   in varchar_4000_table,
    p_indent   in number default 0)
    return clob;


  /* Prozedur zum direkten Ersetzen von Zeichenfolgen in einem Template durch die 
   * Ergebnisse der SQL-Abfrage
   * %param p_template Template mit Ersetzungsankern. Syntax der Ersetzungsanker:
   *        #<Name des Ersetzungsankers, muss Tabellenspalte entsprechen>
   *        |<Praefix, falls Wert not null>
   *        |<Postfix, falls Wert not null>
   *        |<Wert, falls NULL># 
   *        Alle PIPE-Zeichen und Klauseln sind optional, muessen aber, wenn sie 
