使用绑定在 Snowflake 中将数据库和架构名称作为参数传递并接收错误
Passing DB and Schema name as parameters in Snowflake using binds and receiving error
我正在使用绑定将数据库和架构名称作为参数传递到 Snowflake 存储过程中,不确定我看到的语法错误是什么。请求你的帮助。
代码:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA VARCHAR)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = ` CREATE TABLE :1.TEST_KK AS SELECT * FROM :1.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SCHEMA]});
return 'success';
$$;
call repo('DB_DEV.DMS')
我试过将数据库和架构名称存储在一个变量中,并绑定该变量,如下所示,但我也遇到了错误。
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command = ` CREATE TABLE ?.TEST_KK AS SELECT * FROM ?.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;
call repo('DB_DEV.DMS')
其他方式:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command = ` CREATE TABLE :1.TEST_KK AS SELECT * FROM :1.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;
call repo('DB_DEV.DMS')
我得到如下语法错误:
对于第二个代码:存储过程 REPO 中的执行错误:
SQL compilation error: syntax error line 1 at position 14 unexpected '?'.
Syntax error line 1 at position 24 unexpected 'AS'.
Syntax error line 1 at position 41 unexpected '?'.
At Snowflake.execute, line 5 position 13
对于第三个代码:存储过程 REPO 中的执行错误:
SQL compilation error: syntax error line 1 at position 14 unexpected ':'.
Syntax error line 1 at position 25 unexpected 'AS'.
Syntax error line 1 at position 42 unexpected ':'.
At Snowflake.execute, line 5 position 13
不能对部分对象名称使用绑定变量。您可以使用 IDENTIFIER() SQL 函数将它们用于整个对象名称(三部分或使用上下文)。
如果您想使用部分名称,最简单的方法是使用 JavaScript 中的模板文字。这仅在您使用反引号打开和关闭字符串时有效,就像您在示例代码中所做的那样:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA VARCHAR)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = ` CREATE TABLE ${DB_SCHEMA}.TEST_KK AS SELECT * FROM ${DB_SCHEMA}.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command});
return 'success';
$$;
call repo('DB_DEV.DMS')
非常感谢@Greg Pavlik。我尝试了下面的方法,它也有效。
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command ="CREATE TABLE "+ DB_SC +".TEST_KK " + "AS SELECT * FROM " + DB_SC+ ".DIM_ACTIVITY_HIER";
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;
我正在使用绑定将数据库和架构名称作为参数传递到 Snowflake 存储过程中,不确定我看到的语法错误是什么。请求你的帮助。
代码:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA VARCHAR)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = ` CREATE TABLE :1.TEST_KK AS SELECT * FROM :1.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SCHEMA]});
return 'success';
$$;
call repo('DB_DEV.DMS')
我试过将数据库和架构名称存储在一个变量中,并绑定该变量,如下所示,但我也遇到了错误。
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command = ` CREATE TABLE ?.TEST_KK AS SELECT * FROM ?.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;
call repo('DB_DEV.DMS')
其他方式:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command = ` CREATE TABLE :1.TEST_KK AS SELECT * FROM :1.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;
call repo('DB_DEV.DMS')
我得到如下语法错误:
对于第二个代码:存储过程 REPO 中的执行错误:
SQL compilation error: syntax error line 1 at position 14 unexpected '?'.
Syntax error line 1 at position 24 unexpected 'AS'.
Syntax error line 1 at position 41 unexpected '?'.
At Snowflake.execute, line 5 position 13
对于第三个代码:存储过程 REPO 中的执行错误:
SQL compilation error: syntax error line 1 at position 14 unexpected ':'.
Syntax error line 1 at position 25 unexpected 'AS'.
Syntax error line 1 at position 42 unexpected ':'.
At Snowflake.execute, line 5 position 13
不能对部分对象名称使用绑定变量。您可以使用 IDENTIFIER() SQL 函数将它们用于整个对象名称(三部分或使用上下文)。
如果您想使用部分名称,最简单的方法是使用 JavaScript 中的模板文字。这仅在您使用反引号打开和关闭字符串时有效,就像您在示例代码中所做的那样:
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA VARCHAR)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = ` CREATE TABLE ${DB_SCHEMA}.TEST_KK AS SELECT * FROM ${DB_SCHEMA}.DIM_ACTIVITY_HIER`;
snowflake.execute({sqlText: sql_command});
return 'success';
$$;
call repo('DB_DEV.DMS')
非常感谢@Greg Pavlik。我尝试了下面的方法,它也有效。
CREATE OR REPLACE PROCEDURE repo(DB_SCHEMA STRING)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
var DB_SC = DB_SCHEMA;
var sql_command ="CREATE TABLE "+ DB_SC +".TEST_KK " + "AS SELECT * FROM " + DB_SC+ ".DIM_ACTIVITY_HIER";
snowflake.execute({sqlText: sql_command, binds: [DB_SC]});
return DB_SC;
$$;