在雪花中绑定变量时标识符无效
Invalid identifier when binding variables in snowflake
我创建了一个存储过程,它从 table 获取某些值并将这些值用于另一个 sql 查询
但是我成功地获得了我需要的值
我不断收到我通过绑定传递的值的无效标识符
下面是我的代码片段
var v_role = sqlRS1.getColumnValue(1);
var v_database = sqlRS1.getColumnValue(2);
var v_schema = sqlRS1.getColumnValue(3);
var v_table = sqlRS1.getColumnValue(4);
var v_column = sqlRS1.getColumnValue(5);
var v_tableColumn = v_table + `_` + v_column;
var v_sqlCode5 = `SELECT *
FROM db.sch.tbl
WHERE DATABASE_NAME = identifier(?)
AND SCHEMA_NAME = identifier(?)
AND POLICY_NAME IN (identifier(?))`;
var sqlStmt2 = snowflake.createStatement({sqlText:v_sqlCode5,binds:[v_database,v_schema,v_tableColumn]});
var sqlRS2 = sqlStmt2.execute();
该错误将指出 DATABASE_NAME 中传递的值的标识符无效
我检查了查询历史,发现传递的值是正确的
所以我不确定如何解决这个问题,任何帮助将不胜感激
Identifiers are using to replace table names (which can been seen in this example)。你所拥有的看起来应该是正常的平等加入:
另一种说法是您生成的 SQL:
SELECT * FROM DB.SCH.TBL
WHERE DATABASE_NAME = identifier('AD')
AND SCHEMA_NAME = identifier('DB')
AND POLICY_NAME IN (identifier('M_E'));
这个 运行 在 UI 中对你来说没有错误吗?
我怀疑您需要将其更改为:
SELECT * FROM DB.SCH.TBL
WHERE DATABASE_NAME = 'AD'
AND SCHEMA_NAME = 'DB'
AND POLICY_NAME IN ('M_E');
让它发挥作用。
您需要的是确保传入的值被完整引用。所以事情不会逃脱,这是我对将它们作为绑定变量传递的理解。
这意味着您的来源应该是:
var v_sqlCode5 = `SELECT *
FROM db.sch.tbl
WHERE DATABASE_NAME = ?
AND SCHEMA_NAME = ?
AND POLICY_NAME IN (?)`;
我创建了一个存储过程,它从 table 获取某些值并将这些值用于另一个 sql 查询 但是我成功地获得了我需要的值 我不断收到我通过绑定传递的值的无效标识符 下面是我的代码片段
var v_role = sqlRS1.getColumnValue(1);
var v_database = sqlRS1.getColumnValue(2);
var v_schema = sqlRS1.getColumnValue(3);
var v_table = sqlRS1.getColumnValue(4);
var v_column = sqlRS1.getColumnValue(5);
var v_tableColumn = v_table + `_` + v_column;
var v_sqlCode5 = `SELECT *
FROM db.sch.tbl
WHERE DATABASE_NAME = identifier(?)
AND SCHEMA_NAME = identifier(?)
AND POLICY_NAME IN (identifier(?))`;
var sqlStmt2 = snowflake.createStatement({sqlText:v_sqlCode5,binds:[v_database,v_schema,v_tableColumn]});
var sqlRS2 = sqlStmt2.execute();
该错误将指出 DATABASE_NAME 中传递的值的标识符无效 我检查了查询历史,发现传递的值是正确的 所以我不确定如何解决这个问题,任何帮助将不胜感激
Identifiers are using to replace table names (which can been seen in this example)。你所拥有的看起来应该是正常的平等加入:
另一种说法是您生成的 SQL:
SELECT * FROM DB.SCH.TBL
WHERE DATABASE_NAME = identifier('AD')
AND SCHEMA_NAME = identifier('DB')
AND POLICY_NAME IN (identifier('M_E'));
这个 运行 在 UI 中对你来说没有错误吗?
我怀疑您需要将其更改为:
SELECT * FROM DB.SCH.TBL
WHERE DATABASE_NAME = 'AD'
AND SCHEMA_NAME = 'DB'
AND POLICY_NAME IN ('M_E');
让它发挥作用。
您需要的是确保传入的值被完整引用。所以事情不会逃脱,这是我对将它们作为绑定变量传递的理解。
这意味着您的来源应该是:
var v_sqlCode5 = `SELECT *
FROM db.sch.tbl
WHERE DATABASE_NAME = ?
AND SCHEMA_NAME = ?
AND POLICY_NAME IN (?)`;