You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:04:57