如何解决如何参数化 Lua 脚本以遍历执行查询的表值
Lua 的新功能,但正在尝试。
我有多个需要执行的“创建表”查询,仅更改架构和表名称。 目前我正在明确定义每个查询。 我想从下表中参数化 Lua 脚本并传递表名作为参数,因为有 100 多个表需要以这种方式生成。
映射表
目标架构 | 目标表 | originSchema | 起源表 |
---|---|---|---|
模式1 | table1 | 模式3 | table3 |
schema2 | table2 | 模式4 | table4 |
目前的解决方案
CREATE LUA SCRIPT "ScriptName" () RETURNS ROWCOUNT AS
query([[
Create or replace table schema1.table1 as
select * from schema3.table3;
]])
query([[
Create or replace table schema2.table2 as
select * from schema4.table4;
]])
我尝试过的:
CREATE OR REPLACE LUA SCRIPT "ScriptName"('MappingTable') RETURNS ROWCOUNT AS
map_table = execute[[ SELECT * FROM .."'MappingTableName'"..;]] -- passing argument of the script,mapping table name
-- passing values from the columns
load = [[Create or replace table ]]..
[[']]..targetSchema..[['.']]..
[[']]..targetTable..]]..
[[as select * from]]..
[[']]..originSchema..[['.']]..
[[']]..originTable..[[']]
不确定语法,我想我也需要遍历表的值。 谢谢
解决方法
这是一个示例脚本:
create or replace lua script ScriptName (
t_MappingTable,s_ConditionColumn,s_ConditionValue
)
returns rowcount as
-- passing argument of the script,mapping table name
local map_table = query ([[
select * from ::MappingTable where ::ConditionColumn = :ConditionValue
]],{
MappingTable = t_MappingTable,ConditionColumn = s_ConditionColumn,ConditionValue = s_ConditionValue
});
-- passing values from the columns
for i = 1,#map_table do
query ([[
create or replace table ::targetSchema.::targetTable as
select * from ::originSchema.::originTable
]],{
targetSchema = map_table[i].TARGETSCHEMA,targetTable = map_table[i].TARGETTABLE,originSchema = map_table[i].ORIGINSCHEMA,originTable = map_table[i].ORIGINTABLE
});
end
/
您可能想以另一种方式从 map_table
读取值。
如果您有区分大小写的列名:
targetSchema = map_table[i]."targetSchema",targetTable = map_table[i]."targetTable",originSchema = map_table[i]."originSchema",originTable = map_table[i]."originTable"
如果您确定列顺序并且不想担心列名:
targetSchema = map_table[i][1],targetTable = map_table[i][2],originSchema = map_table[i][3],originTable = map_table[i][4]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。