我试图将变量传递到多个Teradata SQL文件中。当文件中没有“创建表”时,我有几个脚本可以很好地完成这项工作。当我运行带有硬编码变量的文件时,它们运行得很好,但是当我使用open/replace函数时,我得到一个错误“只有et或null语句在ddl语句之后才是合法的”
这告诉我是“Open().Replace()”函数导致了这种情况。这似乎导致python以并行方式而不是串行方式运行SQL脚本,但我不知道如何解释这一点。我试图在execute游标之外使用open/replace,但是由于变量没有被更改,它出现了错误。下面我有一些针对这个问题简化的代码示例。这是我第一次发布问题,如果有更好的方法,请随时发表评论,以便我可以进行编辑
test.sql不带变量
create multiset volatile table sdates as (Sel caldt, datesk
from dimdates
where day = 'Mon'
and mth = 'Feb');
ins into vartest (Sel caldt, site, sum(sales)
from fctsales f
join sdates s
on f.datesk = s.datesk);
有效的python代码
query = cur.execute(file = 'test.sql')
带变量的test.sql
create multiset volatile table sdates as (Sel caldt, datesk
from dimdates
where day = 'bbbb'
and mth = 'oooo');
ins into vartest (Sel caldt, site, sum(sales)
from fctsales f
join sdates s
on f.datesk = s.datesk);
失败的python代码
bbbb = 'Mon'
oooo = 'Feb'
query = cur.execute(open(file = 'test.sql').read().replace('bbbb',bbbb).replace('oooo',oooo))
DatabaseError: (3932, '[25000] [Teradata][ODBC Teradata Driver][Teradata Database](-3932)Only an ET or null statement is legal after a DDL Statement.')
编辑1:添加了准确的错误代码
目前没有回答
相关问题 更多 >
编程相关推荐