Snowflake序列nextval外部调用提示无效标识符如何解决?
Snowflake外部调用序列报invalid identifier错误的解决方案
报错本质是外部连接会话无法定位到已创建的batch_id_seq序列,按以下步骤排查解决即可:
- 指定序列的完全限定名
避免依赖会话的默认库、schema配置,直接写明序列所属的数据库和schema:select 你的数据库名.你的schema名.batch_id_seq.nextval; - 外部连接初始化时指定默认库和schema
不想每次都写全限定名的情况下,可在外部连接建立后先执行两条切换上下文的语句,再调用序列:
也可直接在JDBC/ODBC等连接串的参数里配置默认的use database 你的数据库名; use schema 你的schema名;db、schema参数,连接后默认就处于对应的上下文环境。 - 校验连接账号的权限
确认外部连接使用的角色,拥有该序列的USAGE权限,权限不足也会触发标识符无效的报错,授权语句如下:grant usage on sequence 你的数据库名.你的schema名.batch_id_seq to role 你外部连接使用的角色名; - 检查标识符大小写匹配
如果你创建序列时使用了双引号包裹小写名称(比如create sequence "batch_id_seq"),调用时也需要加双引号保持大小写一致:
Snowflake默认会把未加双引号的标识符自动转为大写,若创建时未加双引号,调用时写大写的select "batch_id_seq".nextval;BATCH_ID_SEQ.NEXTVAL也可以正常识别。
内容的提问来源于stack exchange,提问作者user2238999
相关产品推荐
相关产品推荐

