Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures 如何在snowflake中的存储过程中进行数学计算?_Stored Procedures_Apache Nifi_Snowflake Cloud Data Platform - Fatal编程技术网

Stored procedures 如何在snowflake中的存储过程中进行数学计算?

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

加入两张雪花桌后,我得到了一个计数(*)。这是在存储过程中完成的。如果计数大于零,我需要传递一个值。我的存储过程从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处理器返回值?

您永远不会返回浮点值,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非常感谢您的回复。正如你所说,返回浮动给了我这个问题。我纠正了它,我得到了想要的输出。多谢!