加入两个Snowflake表后,我得到了一个count(*)。这是在存储过程中完成的。如果计数大于零,则需要传递一个值。我的存储过程从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_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处理器?
答案 0 :(得分:2)
您永远不会返回SP定义为返回类型的浮点值。如果return_value大于0,它将尝试返回字符串'email required。',它不是浮点数。那会产生NaN。如果return_value不大于0,则代码将永远不会返回任何类型的值。那将返回NULL。由于您为返回指定NOT NULL,因此将其强制为NaN
此外,我不确定您为什么要对rs.getColumnValue(1)进行字符串化。选择计数(*)将产生一个整数值,您可以直接读取该值。
您可能想要这样的东西:
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;
$$;
这将返回您的联接SQL产生的行数。如果您想要不同的东西,请说明所需的输出。