Вы никогда не возвращаете значение с плавающей запятой, которое 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. Если вы хотите чего-то другого, уточните желаемый результат.