Всем спасибо! Библиотеку и пр. обязательно посмотрю. Код, предложенный Евгением, работает. Я его лишь немножко доработал таким образом:

## Код:
```
PROCEDURE GenQuery (IN table, type: ARRAY OF CHAR; OUT query: ARRAY OF CHAR);
       VAR r: Meta.Item; s: Meta.Scanner; n: Meta.Name; arrLen, nameType: ARRAY 20 OF CHAR; 
   BEGIN
      Meta.LookupPath(type, r); ASSERT(r.typ = Meta.recTyp, 20);
      s.ConnectTo(r);
      query := "CREATE TABLE " + table + " (";
      s.Scan;
      WHILE ~s.eos DO
         s.GetObjName(n);
         CASE s.this.typ OF
            1: nameType := "INTEGER";   (*???*)
            |2: nameType :=  "VARCHAR(1)";   (*???*)
            |3: nameType :=  "VARCHAR(1)";   (*???*)
            |4: nameType :=   "INTEGER";    (*???*)
            |5: nameType :=  "INTEGER";   (*???*)
            |6: nameType :=  "INTEGER";
            |7: nameType :=  "REAL";   (*???*)
            |8: nameType :=  "REAL";
            |10: nameType := "INTEGER";   (*???*)
            |18:
               Strings.IntToString(s.this.Len(), arrLen);
               nameType := "VARCHAR(" + arrLen + ") ";  
         END;

         s.Scan;
         query := query + n + " " + nameType;
         IF ~s.eos THEN query := query + ", " END
      END;
      query := query + ")";
      StdLog.String(query); StdLog.Ln
   END GenQuery;
```


Есть некоторые "непонятки" с типами (там, где отмечено (*???*)), но в данный момент для меня это не важно.