SNowflake - 语法错误:意外的“<EOF>”。查询大小限制?

SNowflake - Syntax error: unexpected '<EOF>'. Query size limit?

提问人:MaxenceS 提问时间:5/17/2023 更新时间:5/17/2023 访问量:297

问:

我有一个程序,我想修改它。当我使用此请求时:

CREATE OR REPLACE PROCEDURE import_stage_sfr_ac_reeng_fixe_handicall_bordeaux(p_loading_mode VARCHAR)
RETURNS VARCHAR NOT NULL
LANGUAGE SQL
AS
BEGIN
 
    IF (:p_loading_mode ='incremental') THEN
        COPY INTO SFR_AC_REENG_FIXE_HANDICALL_BORDEAUX (
            V_NUM_COMMANDE_MIG,
            V_SITE_CMD,
            V_ACTIVITE_EZY,
            V_TYPE_AC,
            D_JOUR_CMD,
            D_JOUR_PANIER,
            V_SEMAINE_CMD,
            V_MOIS_CMD,
            V_LOGIN_CC_CMD,
            V_NUM_CONTRAT,
 
            V_TYPE_ACTE,
            B_MIG,
            V_COURANT_PTA_MIG,
            V_LIBL_COURANT_PTA_MIG,
            V_FUTUR_PTA_MIG,
            V_LIBL_FUTUR_PTA_MIG,
            V_LIBL_FUTUR_PTA_MIG_COURT,
            B_REMISE,
            V_LIBL_REMISE,
            N_MT_REMISE_M_TTC,
 
            B_USAGE,
            V_LIBL_USAGE,
            V_NOM,
            V_PRENOM,
            N_FACIAL_AVANT,
            N_FACIAL_APRES,
            N_REMISE_AVANT,
            N_REMISE_APRES,
            N_MOUVEMENT_VALEUR,
            V_CODE_CAMPAGNE,
            
            B_FLAG_HBD,
            V_CODE_CAMPAGNE,
            V_CODE_LOT,
            V_RAC,
            
            V_TECH_NOM_FICHIER,
            V_TECH_STATUT_TRAITEMENT,
            V_TECH_NOM_TRAITEMENT,
            TS_TECH_DEBUT_TRAITEMENT
        ) FROM ( 
        SELECT
            $12,
            $1,
            $2,
            $3,
            TO_DATE($4, 'YYYY-MM-DD'),
            TO_DATE($5, 'YYYY-MM-DD'),
            $6,
            $7,
            $8,
            $9,
 
            $10,
            CAST($11 AS BOOLEAN),
            $13,
            $14,
            $15,
            $16,
            $17,
            CAST($18 AS BOOLEAN),
            $19,
            CAST($20 AS NUMBER(10, 0)),
            
            CAST($21 AS BOOLEAN),
            $22,
            $23,
            $24,
            CAST(REPLACE($25, ',', '.') AS NUMBER(6, 3)),
            CAST(REPLACE($26, ',', '.') AS NUMBER(6, 3)),
            CAST(REPLACE($27, ',', '.') AS NUMBER(4, 2)),
            CAST(REPLACE($28, ',', '.') AS NUMBER(4, 2)),
            CAST(REPLACE($29, ',', '.') AS NUMBER(6, 3)),
            $30,
 
            TO_BOOLEAN($31),
            $32,
            $33,
            $34,
            
            METADATA$FILENAME,
            'I',
            'INGEST MODE : '|| :p_loading_mode,
            current_timestamp(0)
        FROM  @ES_SFR )
        FILE_FORMAT  = ( FORMAT_NAME  = FF_INGEST_CSV_SFR)
        PATTERN  =  '.*incremental.*ac_reeng_fixe_handicall_bordeaux.*\.csv';
    END IF;

它有效。但是,如果我只添加一列,无论列如何,我都会收到消息。Syntax error: unexpected '<EOF>'.

例:

CREATE OR REPLACE PROCEDURE import_stage_sfr_ac_reeng_fixe_handicall_bordeaux(p_loading_mode VARCHAR)
RETURNS VARCHAR NOT NULL
LANGUAGE SQL
AS
BEGIN
 
    IF (:p_loading_mode ='incremental') THEN
        COPY INTO SFR_AC_REENG_FIXE_HANDICALL_BORDEAUX (
            V_NUM_COMMANDE_MIG,
            V_SITE_CMD,
            V_ACTIVITE_EZY,
            V_TYPE_AC,
            D_JOUR_CMD,
            D_JOUR_PANIER,
            V_SEMAINE_CMD,
            V_MOIS_CMD,
            V_LOGIN_CC_CMD,
            V_NUM_CONTRAT,
 
            V_TYPE_ACTE,
            B_MIG,
            V_COURANT_PTA_MIG,
            V_LIBL_COURANT_PTA_MIG,
            V_FUTUR_PTA_MIG,
            V_LIBL_FUTUR_PTA_MIG,
            V_LIBL_FUTUR_PTA_MIG_COURT,
            B_REMISE,
            V_LIBL_REMISE,
            N_MT_REMISE_M_TTC,
 
            B_USAGE,
            V_LIBL_USAGE,
            V_NOM,
            V_PRENOM,
            N_FACIAL_AVANT,
            N_FACIAL_APRES,
            N_REMISE_AVANT,
            N_REMISE_APRES,
            N_MOUVEMENT_VALEUR,
            V_CODE_CAMPAGNE,
            
            B_FLAG_HBD,
            V_CODE_CAMPAGNE,
            V_CODE_LOT,
            V_RAC,
            V_PROMO_TR,
            
            V_TECH_NOM_FICHIER,
            V_TECH_STATUT_TRAITEMENT,
            V_TECH_NOM_TRAITEMENT,
            TS_TECH_DEBUT_TRAITEMENT
        ) FROM ( 
        SELECT
            $12,
            $1,
            $2,
            $3,
            TO_DATE($4, 'YYYY-MM-DD'),
            TO_DATE($5, 'YYYY-MM-DD'),
            $6,
            $7,
            $8,
            $9,
 
            $10,
            CAST($11 AS BOOLEAN),
            $13,
            $14,
            $15,
            $16,
            $17,
            CAST($18 AS BOOLEAN),
            $19,
            CAST($20 AS NUMBER(10, 0)),
            
            CAST($21 AS BOOLEAN),
            $22,
            $23,
            $24,
            CAST(REPLACE($25, ',', '.') AS NUMBER(6, 3)),
            CAST(REPLACE($26, ',', '.') AS NUMBER(6, 3)),
            CAST(REPLACE($27, ',', '.') AS NUMBER(4, 2)),
            CAST(REPLACE($28, ',', '.') AS NUMBER(4, 2)),
            CAST(REPLACE($29, ',', '.') AS NUMBER(6, 3)),
            $30,
 
            TO_BOOLEAN($31),
            $32,
            $33,
            $34,
            $35,
            
            METADATA$FILENAME,
            'I',
            'INGEST MODE : '|| :p_loading_mode,
            current_timestamp(0)
        FROM  @ES_SFR )
        FILE_FORMAT  = ( FORMAT_NAME  = FF_INGEST_CSV_SFR)
        PATTERN  =  '.*incremental.*ac_reeng_fixe_handicall_bordeaux.*\.csv';
    END IF;

我从今天早上开始搜索,我能够通过删除评论来添加更多列。因此,我真的想知道这是否不是对过程中字符数的限制。有什么想法吗?

谢谢

snowflake-cloud-data-platform 过程 EOF

评论

0赞 Alexander Klimenko 5/17/2023
你确定第一个有效吗?
0赞 MaxenceS 5/17/2023
第一个返回 : .如果我用 35 美元替换 34 美元的列,我会收到相同的消息。如果我尝试添加列,则会出现错误。如果我单独执行请求,没有程序,它就可以工作。Function IMPORT_STAGE_SFR_AC_REENG_FIXE_HANDICALL_BORDEAUX successfully created
1赞 Lukasz Szozda 5/17/2023
在存储过程中对块周围使用字符串常量分隔符
1赞 Alexander Klimenko 5/17/2023
您可以尝试在第一个和最后一个之后添加双美元符号并检查它是否有效吗?如图所示$$BEGINEND
0赞 MaxenceS 5/17/2023
我有测试和导入,它可以工作!谢谢 !我丢失了语法突出显示,但没关系。

答:

1赞 Alexander Klimenko 5/17/2023 #1

要解决此问题,您需要添加 sings 来引用代码块。$$

例:

CREATE OR REPLACE PROCEDURE import_stage_sfr_ac_reeng_fixe_handicall_bordeaux(p_loading_mode VARCHAR)
RETURNS VARCHAR NOT NULL
LANGUAGE SQL
AS
$$
BEGIN
--your code the scripting block
END
$$;

文档参考。