脚本执行问题

def existsVariable(varName){
        return objs(true).name.find(varName)>=0
}
drop table if exists new_tbl;
existsVariable(`new_tbl)
// 创建一个现有的表
existingTable = table(100:0, `time`symbol`price, [TIMESTAMP, SYMBOL, DOUBLE])

// 向现有表中插入数据
insert into existingTable values (2022.01.01T10:00:00, `AAPL, 150.0)
insert into existingTable values (2022.01.01T10:01:00, `AAPL, 151.0)
insert into existingTable values (2022.01.01T10:02:00, `AAPL, 152.0)

// 检查内存表是否存在
existsVariable(`new_tbl)
if (existsVariable(`new_tbl)) {
        print "ok"
    // 内存表存在,将现有表的第一行插入内存表中
   insert into new_tbl select * from existingTable limit 1
} else {
    // 内存表不存在,使用现有表创建内存表
        //new_tbl = select * from existingTable where 1=2
        new_tbl = select * from existingTable limit 1
        delete from new_tbl
      insert into new_tbl select top 1 * from existingTable
}

// 查询新内存表的数据
select * from new_tbl


上述脚本一步步执行可以成功、但是一起执行就报错:

Can't recognize table new_tbl

这是什么原因,以及如何解决?

请先 登录 后评论

1 个回答

peter

直接原因就是在脚本上下文中,使用new_tbl时未定义,可以如下修改:

//......
if(!existsVariable(`new_tbl)){
    new_tbl = select * from existingTable limit 1
    delete from new_tbl
    insert into new_tbl select top 1 * from existingTable
}else{
    insert into new_tbl select * from existingTable limit 1
}
//......

为什么一行行执行可以成功,而一起执行失败呢?
因为语句解析的时候是整体看一遍的,未定义先使用是不允许的

解释下这种设计意图:
假如我们在做数据分析的工作,使用解释型的语言会比较好,开发迭代比较快,解释型的语言在执行代码的时候有两种策略:
1. 一行行执行,这种有个弊端就是万一我中间有个编写错误,前面的就白跑了
2. 整体检查再执行,这样的话可以节省一些不必要的失败而造成的时间损失
dolphindb 脚本用的是2
请先 登录 后评论
  • 1 关注
  • 0 收藏,441 浏览
  • wfHuang 提出于 2023-09-22 16:20

相似问题