Snowflake Python Connector执行含DECLARE块SQL时遇EOF错误求助
解决Snowflake Connector执行含PL/SQL块脚本的EOF错误
方法1:拆分执行语句,分开处理DDL和PL/SQL块
把USE SCHEMA语句和PL/SQL块拆成两个独立的执行单元,避免Connector错误拆分PL/SQL块的结构:
import snowflake.connector # 建立连接 conn = snowflake.connector.connect( user='你的用户名', password='你的密码', account='你的账户标识' ) cursor = conn.cursor() # 单独执行Schema切换语句 cursor.execute('USE SCHEMA "CCM";') # 用三重引号包裹完整PL/SQL块,作为单个语句执行 plsql_code = """ DECLARE v_test_id NUMBER; BEGIN -- 创建表 CREATE TABLE IF NOT EXISTS DEMO_TABLE (ID NUMBER, CONTENT VARCHAR(50)); -- 插入测试数据 v_test_id := 1001; INSERT INTO DEMO_TABLE VALUES (v_test_id, 'Sample Data'); END; """ cursor.execute(plsql_code) # 提交并关闭资源 conn.commit() cursor.close() conn.close()
方法2:使用execute_string执行完整脚本
Snowflake Connector提供的execute_string()方法可以正确解析多语句脚本,自动识别PL/SQL块的边界,不会单独拆分DECLARE语句:
import snowflake.connector conn = snowflake.connector.connect( user='你的用户名', password='你的密码', account='你的账户标识' ) cursor = conn.cursor() # 完整脚本内容,包含USE SCHEMA和PL/SQL块 full_script = """ USE SCHEMA "CCM"; DECLARE v_test_id NUMBER; BEGIN CREATE TABLE IF NOT EXISTS DEMO_TABLE (ID NUMBER, CONTENT VARCHAR(50)); v_test_id := 1001; INSERT INTO DEMO_TABLE VALUES (v_test_id, 'Sample Data'); END; """ # 用execute_string执行整个脚本 cursor.execute_string(full_script) conn.commit() cursor.close() conn.close()
注意事项
- 确保PL/SQL块的
END后必须加;,这是Snowflake识别块结束的标志,缺失会导致语法解析错误。 - 如果脚本中有注释,尽量保持格式规范,避免干扰Connector的语句拆分逻辑。
内容的提问来源于stack exchange,提问作者Maru Ciprian
相关产品推荐
相关产品推荐

