雪花声明在程序内不起作用
Snowflake Statement not working within procedure
我写了一个 SQL 声明。当我正常执行该语句时,它会起作用。但是在存储过程中出现以下错误:
SQL compilation error: error line 1 at position 43 invalid identifier
'PA.S_ID' At Statement.execute, line 13 position 25
CREATE OR REPLACE PROCEDURE DWH.TEST.FILL_BUSHARES()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
function executeSQL(SQL ) {
var rows_affected = 0;
// Prepare statement.
var stmt = snowflake.createStatement(
{
sqlText: SQL
}
);
// Execute Statement
var res = stmt.execute();
rows_affected = res.getNumRowsAffected();
return rows_affected;
}
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 " +
" ,0 as OFIS_Share --10 " +
" ,0 as CREHO_Share --20 " +
" ,0 as COWO_Share --30 " +
" ,0 as TECH_Share --40 " +
" ,0 as Lifestyle_Share --50 " +
" ,0 as NISO_Share --60 " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);
var returnStatement = "test" ;
return returnStatement;
$$;
但声明是正确的。如果我复制声明,将其添加到 Notepad++、crtl+h 并将所有 " 替换为空,将所有 + 替换为空,我 运行 它在经典控制台中工作。
"INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 " +
" ,0 as OFIS_Share --10 " +
" ,0 as CREHO_Share --20 " +
" ,0 as COWO_Share --30 " +
" ,0 as TECH_Share --40 " +
" ,0 as Lifestyle_Share --50 " +
" ,0 as NISO_Share --60 " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS PA "
我自己无法解释为什么它不能在存储过程中运行。 Google 没有帮助。标识符没有错。它不区分大小写。相同的查询在没有 " 和 + 的情况下也有效。
我认为你的评论标志打破了SQL。你能试试这个吗?
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 \n" +
" ,0 as OFIS_Share --10 \n" +
" ,0 as CREHO_Share --20 \n" +
" ,0 as COWO_Share --30 \n" +
" ,0 as TECH_Share --40 \n" +
" ,0 as Lifestyle_Share --50 \n" +
" ,0 as NISO_Share --60 \n" +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);
如果还是失败,可以运行不评论吗?
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share " +
" ,0 as OFIS_Share " +
" ,0 as CREHO_Share " +
" ,0 as COWO_Share " +
" ,0 as TECH_Share " +
" ,0 as Lifestyle_Share " +
" ,0 as NISO_Share " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);
我写了一个 SQL 声明。当我正常执行该语句时,它会起作用。但是在存储过程中出现以下错误:
SQL compilation error: error line 1 at position 43 invalid identifier 'PA.S_ID' At Statement.execute, line 13 position 25
CREATE OR REPLACE PROCEDURE DWH.TEST.FILL_BUSHARES()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
function executeSQL(SQL ) {
var rows_affected = 0;
// Prepare statement.
var stmt = snowflake.createStatement(
{
sqlText: SQL
}
);
// Execute Statement
var res = stmt.execute();
rows_affected = res.getNumRowsAffected();
return rows_affected;
}
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 " +
" ,0 as OFIS_Share --10 " +
" ,0 as CREHO_Share --20 " +
" ,0 as COWO_Share --30 " +
" ,0 as TECH_Share --40 " +
" ,0 as Lifestyle_Share --50 " +
" ,0 as NISO_Share --60 " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);
var returnStatement = "test" ;
return returnStatement;
$$;
但声明是正确的。如果我复制声明,将其添加到 Notepad++、crtl+h 并将所有 " 替换为空,将所有 + 替换为空,我 运行 它在经典控制台中工作。
"INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 " +
" ,0 as OFIS_Share --10 " +
" ,0 as CREHO_Share --20 " +
" ,0 as COWO_Share --30 " +
" ,0 as TECH_Share --40 " +
" ,0 as Lifestyle_Share --50 " +
" ,0 as NISO_Share --60 " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS PA "
我自己无法解释为什么它不能在存储过程中运行。 Google 没有帮助。标识符没有错。它不区分大小写。相同的查询在没有 " 和 + 的情况下也有效。
我认为你的评论标志打破了SQL。你能试试这个吗?
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share --00 \n" +
" ,0 as OFIS_Share --10 \n" +
" ,0 as CREHO_Share --20 \n" +
" ,0 as COWO_Share --30 \n" +
" ,0 as TECH_Share --40 \n" +
" ,0 as Lifestyle_Share --50 \n" +
" ,0 as NISO_Share --60 \n" +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);
如果还是失败,可以运行不评论吗?
sql_fall1 = executeSQL("INSERT INTO DWH.TEMP.CM_BU_SHARES "+
" SELECT pa.S_ID, " +
" pa.PRCTR, " +
" pa.MATNR, " +
" pa.KUNNR " +
" ,100 as invalid_Share " +
" ,0 as OFIS_Share " +
" ,0 as CREHO_Share " +
" ,0 as COWO_Share " +
" ,0 as TECH_Share " +
" ,0 as Lifestyle_Share " +
" ,0 as NISO_Share " +
"FROM DWH.TEMP.CMPREP_PROFITABILITYANALYSIS as PA "
);