variables - UDF中的Snowflake变量需要大写吗?

标签 variables snowflake-cloud-data-platform uppercase

我创建了一个 UDF 来测试这一点:

CREATE OR REPLACE function EDW_WEATHER.CHK_READING(p_reading VARCHAR2, P_SENSOR VARCHAR2 )
  RETURNS VARCHAR2
  LANGUAGE JAVASCRIPT
AS
$$
    if (P_SENSOR == 'A') return p_reading;
$$
;

运行正确:

select EDW_WEATHER.CHK_READING('A', 'B');

只需将变量 P_SENSOR 小写为:

CREATE OR REPLACE function EDW_WEATHER.CHK_READING(p_reading VARCHAR2, p_sensor VARCHAR2 )
  RETURNS VARCHAR2
  LANGUAGE JAVASCRIPT
AS
$$
    if (p_sensor == 'A') return p_reading;
$$
;

当我运行 UDF 时得到这个:

100132 (P0000): JavaScript execution error: Uncaught ReferenceError: p_sensor is not defined in CHK_READING at 'if (p_sensor == 'A') return p_reading;' position 0

我的问题是 Snowflake 是否真的要求变量(在“if”或“case”语句中使用)为大写,或者我做错了什么。

最佳答案

所以有两件事。一是 session 对数据库对象名称的处理。默认情况下,所有对象都是大写的(也称为大小写无关紧要),并且在这种情况下使用双引号,将意味着 “我的大小写是要使用的预期大小写,还有空格和其他内容这里没问题”。这可以通过 session 变量进行更改,但这会导致使用引号和尊重大小写的 View 出现各种问题,而不适用于不同的 session 。

然后,名称约定行为与 UDF 代码交互/相交,具体情况视情况而定,Snowflake 已经同意“对象的真实名称是它需要在 JavaScript 中调用的名称。

因此,如果您正在访问传入的参数并且没有双引号它的名称(当您声明它时),您将始终必须以 SHOUTING 风格引用它。但是,如果在声明函数时(在“尊重引号”的 session 中)在变量名称上使用双引号,那么您可以在 JavaScript 中使用小写变量,如我在第二个示例中所示。

因此通常这个函数

CREATE OR REPLACE function EDW_WEATHER.CHK_READING(p_reading VARCHAR2, p_sensor VARCHAR2 )

输入仅为 P_READINGP_SENSOR

在本例中

CREATE OR REPLACE function EDW_WEATHER.CHK_READING("p_reading" VARCHAR2, "p_SeNsOr" VARCHAR2 )

输入仅为p_readingp_SeNsOr

所以你可以像这样改变你的功能

CREATE OR REPLACE function CHK_READING("p_reading" VARCHAR2, "p_sensor" VARCHAR2 )
  RETURNS VARCHAR2
  LANGUAGE JAVASCRIPT
AS
$$
    if (p_sensor == 'A') return p_reading;
$$
;

然后幸福就是真的!

select CHK_READING('A', 'B');

请参阅上面如何将函数命名为对象 CHK_READING,您也可以通过 chk_reading 调用它,因为在 SQL 情况下(默认情况下)并不重要。

所以最后一部分:你的问题:

My question is whether Snowflake really require variables (used in "if" or "case" statements) to be in uppercase, or am I doing something wrong.

这不是 IF 或 CASE 中的问题,而是当您使用输入变量时的问题。

关于variables - UDF中的Snowflake变量需要大写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70934891/

相关文章:

javascript - Snowflake/javascript 日期时间格式在迭代期间发生变化

snowflake-cloud-data-platform - 雪花: what is the APPADMIN role?

c++ - 在语句末尾转换为小写?

c++ - 如何使用用户输入的变量来定义另一个变量

ios - Swift 覆盖实例变量

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

python - 如何用循环创建变量?

sql - 雪花查询引擎对几种带查询条件的策略

shell - 在shell中转换为大写

c - 使用二分查找查找已排序字符串中的第一个大写字母