我在ECL中有这个SET
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
APPLY(TableNames, SomeFunctionPreviouslydefined);
...,我想使用APPLY将其传递给函数。 APPLY不接受SET:
“ 3002:\” tblList \“附近的语法错误:预期范围,行设置,自定义, 成功,数据行,数据集,字典,模块名称,标识符, 标识符,函数名,标识符,宏名,'+','^','(','['“
我该怎么办?
答案 0 :(得分:1)
尽管在文档(https://hpccsystems.com/training/documentation/all-ECL语言参考)中不是很清楚,但是您可以使用DATASET声明将SET转换为DATASET,具体形式为:
[ attr := ] DATASET( recordset [, recstruct ] );
attr 数据集的名称,以供以后在其他定义中使用
记录集 。一组嵌入式数据记录。这可以简单地命名先前定义的集合定义,也可以显式使用方括号 指示嵌入式集定义。在方括号内记录 用逗号分隔。可以通过以下任一方式指定记录:1)使用 用大括号({})包围每个记录的字段值。的 每个记录中的字段值均以逗号分隔。 2)A 逗号分隔的内联转换函数列表,它们产生 数据行。列表中的所有转换函数必须产生 记录以相同的结果格式。
recstruct 可选。记录集的RECORD结构。仅当recordset参数只是一条记录或一组记录时才可忽略 在线转换功能
因此,例如,您可以使用:
EXPORT Layout := RECORD
STRING tableName;
END;
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
ds_inlineLayout := DATASET(TableNames, {STRING tableName}); // Define the layout inline
ds_explicitLayout := DATASET(TableNames, Layout); // Use a an explicitly defined layout
OUTPUT(ds_inlineLayout);
OUTPUT(ds_explicitLayout);
最后,要在您的APPLY中使用它:
APPLY(ds_inlineLayout, SomeFunctionPreviouslydefined);