Stored procedures 如何在snowflake中的存储过程中进行数学计算?
加入两张雪花桌后,我得到了一个计数(*)。这是在存储过程中完成的。如果计数大于零,我需要传递一个值。我的存储过程从NiFi处理器调用,我必须将值返回给NiFi,以便NiFi可以发送电子邮件 我得到“NaN”作为下面代码的输出Stored procedures 如何在snowflake中的存储过程中进行数学计算?,stored-procedures,apache-nifi,snowflake-cloud-data-platform,Stored Procedures,Apache Nifi,Snowflake Cloud Data Platform,加入两张雪花桌后,我得到了一个计数(*)。这是在存储过程中完成的。如果计数大于零,我需要传递一个值。我的存储过程从NiFi处理器调用,我必须将值返回给NiFi,以便NiFi可以发送电子邮件 我得到“NaN”作为下面代码的输出 CREATE OR REPLACE PROCEDURE test_Delete_excep() returns float not null language javascript as $$ var rs; var return_value = 0; var SQL
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
rs.next();
return_value += JSON.stringify(rs.getColumnValue(1));
if (return_value > 0) { return 'email required';}
$$;
结果如下:
Row TEST_DELETE_EXCEP
1 NaN
如何进行算术计算并向NiFi处理器返回值?您永远不会返回浮点值,SP将其定义为返回类型。如果return_值大于0,它将尝试返回字符串“email required.”,该字符串不是浮点数。这将生成一个NaN。如果return_值不大于0,则代码将永远不会返回任何类型的值。这将返回NULL。因为您为返回指定了NOTNULL,这将强制返回NaN 另外,我不知道为什么要尝试将rs.getColumnValue(1)字符串化。select count(*)将生成一个整数值,您可以直接读取该整数值 你可能想要这样的东西:
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
if(rs.next()) {
return_value = rs.getColumnValue(1);
} else {
return -1;
}
return return_value;
$$;
这将返回join SQL生成的行数。如果需要不同的输出,请澄清所需的输出。您永远不会返回浮点值,SP将其定义为返回类型。如果return_值大于0,它将尝试返回字符串“email required.”,该字符串不是浮点数。这将生成一个NaN。如果return_值不大于0,则代码将永远不会返回任何类型的值。这将返回NULL。因为您为返回指定了NOTNULL,这将强制返回NaN 另外,我不知道为什么要尝试将rs.getColumnValue(1)字符串化。select count(*)将生成一个整数值,您可以直接读取该整数值 你可能想要这样的东西:
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
if(rs.next()) {
return_value = rs.getColumnValue(1);
} else {
return -1;
}
return return_value;
$$;
这将返回join SQL生成的行数。如果您需要不同的内容,请澄清所需的输出。Greg Pavlik非常感谢您的回复。正如你所说,返回浮动给了我这个问题。我纠正了它,我得到了想要的输出。多谢!Greg Pavlik非常感谢您的回复。正如你所说,返回浮动给了我这个问题。我纠正了它,我得到了想要的输出。多谢!