如何为 Lua 脚本参数化以执行查询中的表值

新手学习 Lua,但正在尝试。

我有多个“创建表”查询需要执行,唯一需要更改的是模式和表名。 目前,我正在显式定义每个查询。 我想从下表中通过传递表名作为参数来参数化 Lua 脚本,因为有 100+ 要以这种方式生成的表。

映射表

targetSchema targetTable originSchema originTable schema1 table1 schema3 table3 schema2 table2 schema4 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'"..;]] --传递脚本的参数,映射表名称

-- 从列中传递值

load =   [[Create or replace table ]]..
                  [[']]..targetSchema..[['.']]..
                  [[']]..targetTable..]]..
                  [[as select * from]]..
                  [[']]..originSchema..[['.']]..
                  [[']]..originTable..[[']]

不确定语法,还需要循环遍历表中的值。 谢谢

点赞
用户1842350
用户1842350

以下是示例脚本:

create or replace lua script ScriptName (
      t_MappingTable
    , s_ConditionColumn
    , s_ConditionValue
)
returns rowcount as

-- 传递脚本参数,映射表名称
local map_table = query ([[
select * from ::MappingTable where ::ConditionColumn = :ConditionValue
]],{
      MappingTable = t_MappingTable
    , ConditionColumn = s_ConditionColumn
    , ConditionValue = s_ConditionValue
});

-- 传递列的值
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]
2021-06-14 20:50:32