You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dyalog APL中获取SQL查询结果的列名?

解决Dyalog APL获取SQL查询结果列名的问题

方法1:从sqapl的SQA.Do返回值中直接提取列元数据

SQA.Do的返回结果是嵌套数组,其中第2个元素包含了查询结果的列元数据,结构和SQA.Columns的返回一致,可直接提取列名:

SQA.Init ''
SQA.Connect 'C1' 'MySQL' 'psw' 'userID'

⍝ 执行查询并保留完整结果
fullResult ← SQA.Do 'C1' qry

⍝ 提取列名(第2个元素的第4列即为列名)
columnNames ← (2⊃fullResult)[;4]

⍝ 提取结果表数据
tbl2 ← ⊃⊃(3⊃fullResult)

该方法无需额外查询,直接利用SQA.Do返回的元数据,是最直接的解决方案。

方法2:包装查询为临时表后使用SQA.Columns

若需复用SQA.Columns函数,可将原查询包装为子查询生成临时表,在同一连接会话中查询列信息:

⍝ 包装原查询为临时表查询
tempQry ← 'SELECT * FROM (' , qry , ') AS temp_query'

⍝ 执行查询确保临时表存在(返回空结果即可)
⊃SQA.Do 'C1' tempQry

⍝ 使用SQA.Columns获取临时表的列名
columnNames ← (2⊃SQA.Columns 'C1' 'temp_query')[;4]

⍝ 执行临时表查询获取完整数据
tbl2 ← ⊃⊃(3⊃SQA.Do 'C1' tempQry)

注意:临时表仅在当前连接会话中存在,需保证列查询和数据查询在同一连接内完成。

方法3:扩展LOADDATA的LoadSQL函数获取列名

LoadSQL默认仅返回数据,可查看其内部实现(输入)DISPLAY LoadSQL),自定义封装函数让它同时返回数据和列名:

⍝ 自定义封装函数,同时返回数据与列名
LoadSQLWithCols ← {
    connParams ← ⊃⍵
    qry ← ⊃1↓⍵
    fullResult ← SQA.Do (⊃connParams) qry
    data ← ⊃⊃(3⊃fullResult)
    cols ← (2⊃fullResult)[;4]
    ⍝ 返回嵌套数组:[数据, 列名]
    data,cols
}

⍝ 使用自定义函数
result ← LoadSQLWithCols ('MySQL' 'psw' 'userID') qry
tbl1 ← ⊃result
columnNames ← 1↓result

内容的提问来源于stack exchange,提问作者T.P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:05:05