Вы можете сделать это, но это зависит от того, знаете ли вы всю вселенную возможных символов перед написанием.Если, по-видимому, это какой-то идентификатор учетной записи, вы, возможно, хорошо знаете все возможные значения перед сохранением.В этом случае вы можете сначала создать вектор sym в главном потоке, а затем перенаправить запись, выполнив перечисление с помощью оператора $ , который не обновляет глобальную переменную.Например:
npertable:100000;
dbname:`:partdb;
sym:`C123`C132`C321`C121`C131; //create sym vector
(` sv dbname,`sym) set sym; //save sym vector in db
newpart:{[date]
firstofmonth:"d"$"m"$date;
table:([]date:npertable?firstofmonth+til 25;acc:npertable?`C123`C132`C321`C121`C131;c:npertable?til 100);
table:`date`acc xasc table;
partname:`$(("/" sv (string dbname;string "m"$date;enlist "t")),enlist "/");
table:@[table;`acc;`sym$]; //enumerate acc column with hardcoded column name
partname set table; //table already enumerated, don't use .Q.en
};
newpart peach 2018.03.01 2018.04.01 2018.05.01
Обратите внимание, что в этом случае перечисляемое имя столбца жестко закодировано - в более гибкой реализации вы можете использовать некоторую модификацию .Q.en
для определения столбцов, которые требуют перечисления, и выполнить это.для всех необходимых столбцов автоматически.
Конечно, если в вашей реальной функции newpart
есть вероятность добавления новых значений в поле acc
, это создает большую проблему.,В идеале вы должны знать о любых новых значениях в основном потоке перед выполнением peach
, поэтому вы можете добавить любые новые значения в вектор sym
.