SnowConvert AI - Redshift - CREATE PROCEDURE¶
描述¶
为当前数据库创建新的存储过程或替换现有过程。(Redshift SQL 语言参考 Create Procedure (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html))。
有关过程子句的更多信息,请参阅以下定义:
语法¶
The following is the SQL syntax to create a Procedure in Amazon Redshift. See the Redshift CREATE PROCEDURE specification (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html) for this syntax.
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
ALIAS DECLARATION¶
描述¶
如果存储过程的签名省略了实参名称,则可以为该实参声明别名。
Snowflake 不支持此功能。
为了实现功能等效,将删除别名,并将重命名所有用法。
为无名参数声明别名时,将为该参数和用法创建生成的名称。当别名是带名称的参数时,别名将替换为真实的参数名称。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
ARGUMENTS MODE¶
描述¶
Amazon Redshift 存储过程支持可在过程调用期间传递的参数。这些参数允许您提供输入值、检索输出值或将其用于输入和输出操作。以下是参数的类型、模式及其用法示例的详细说明。Snowflake 仅支持输入值。
IN(输入参数)¶
用途:用于向过程中传递参数值。
默认模式:如果未指定模式,则参数视为 IN。
行为:传递到过程中的值不能在过程内修改。
OUT(输出参数)¶
用途:用于从过程中返回值。
行为:可以在过程内修改参数并将其返回给调用者。您无法发送初始值。
INOUT(输入/输出参数)¶
用途:用于将值传递到过程中,并对其进行修改以返回更新的值。
行为:结合了 IN 和 OUT 的行为。无论输出如何,都必须发送初始值。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs¶
SCC-EWI-0028:Snowflake 不支持该类型。
SSC-EWI-RS0010: Top-level procedure call with out parameters is not supported.
PROCEDURE BODY¶
提示
SnowConvert does not support translation for PostgreSQL string constant definition in procedures. Use arrange option
描述¶
Like Redshift, Snowflake supports CREATE PROCEDURE using $$ procedure_logic $$ as the body. There is a difference in the Redshift syntax where a word can be inside the $$ like $word$ and used as a delimiter body like $word$ procedure_logic $word$. SnowConvert AI will transform it by removing the word, leaving the $$.
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
BLOCK STATEMENT¶
描述¶
PL/pgSQL 是一种块结构语言。过程的完整主体通过块进行定义,其中包含变量声明和 PL/pgSQL 语句。语句也可以是嵌套块或子块。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
DECLARE¶
描述¶
该段用于声明过程的所有变量(循环变量除外)。\ Redshift 支持在每个块语句中包含多个 DECLARE 段,但由于 Snowflake 不支持此行为,必须将它们合并为每个块的单个声明语句。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
EXCEPTION¶
描述¶
当发生异常并添加异常处理块时,可以编写 RAISE 语句和大多数其他 PL/pgSQL 语句。例如,您可以使用自定义消息引发异常,或者将记录插入到日志表中。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
LABEL¶
描述¶
在 Redshift 中,标签用于限定块或使用 EXIT 或 END 语句。Snowflake 不支持标签。
警告
由于 Snowflake 不支持标签,因此将打印 EWI。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs¶
SSC-EWI-0094: Label declaration not supported
NONATOMIC¶
描述¶
存储过程中每条语句之后的 NONATOMIC 提交。Snowflake 支持 AUTOCOMMIT 参数。AUTOCOMMIT 的默认设置为 TRUE(启用)。
启用 AUTOCOMMIT 后,显式事务外的每条语句都被视为隐式单语句事务内的语句。换言之,如果该语句成功,则自动提交,如果失败,则自动回滚。换句话说,Snowflake“默认”以 NONATOMIC 模式运行。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
POSITIONAL ARGUMENTS¶
描述¶
Redshift supports nameless parameters by referencing the parameters by their position using $. Snowflake does not support this behavior. To ensure functional equivalence, SnowConvert AI can convert those references by the parameter’s name if the name is present in the definition. If not, SnowConvert AI will generate a name for the parameter, and the uses will be replaced with the new name.
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
RAISE¶
描述¶
Use the
RAISE levelstatement to report messages and raise errors.(Redshift SQL Language Reference RAISE (https://docs.aws.amazon.com/es_es/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-messages-errors))
Note
RAISE are fully supported by Snowflake.
语法¶
在 Amazon Redshift 中,RAISE 语句用于在控制台中生成消息或引发自定义异常。Redshift 允许您指定不同的 levels 来指示消息的严重性。在 Snowflake 中,可以使用用户定义的函数 (UDF) 来模拟此功能,该函数根据指定的级别调用控制台。
异常:\ 当级别为“EXCEPTION”时,会引发自定义异常,并显示一条通用消息:“要查看 EXCEPTIONMESSAGE,需要检查日志。” 异常代码为
-20002,用于通知用户可以在日志中找到自定义消息。这是由于在 Snowflake 中发送自定义异常时的限制。警告:\ 如果级别为“WARNING”,则使用
SYSTEM$LOG_WARN将警告消息打印到 Snowflake 的日志中,这有助于在不中断执行流程的情况下突出显示潜在问题。信息:\ 对于任何其他级别(例如“INFO”),
SYSTEM$LOG_INFO用于将消息打印到控制台日志,从而在不造成严重中断的情况下提供有关系统状态的更详细反馈。
这种方法允许模拟 Redshift 的严重级别功能,使其适应 Snowflake 的语法和功能,同时保持灵活性,并控制执行期间产生的消息和异常。
限制
要在 Snowflake 中查看日志,必须具有特定的权限,例如
ACCOUNTADMIN或SECURITYADMIN角色。Snowflake 中的日志无法立即获取,在信息可见之前可能会稍有延迟。
异常中的个性化错误消息不会像在 Redshift 中那样显示。要查看自定义消息,必须直接访问日志。
For further information, please refer to the following page.
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
UDFs ¶
RAISE_MESSAGE_UDF¶
STRING_FORMAT_UDF¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
RETURN¶
描述¶
RETURN 语句从存储过程返回给调用者。(Redshift SQL 语言参考 Return (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-return))。
将 return 语句从 Amazon Redshift 转换到 Snowflake 非常简单,只需考虑在 Snowflake 的 return 语句中添加 NULL 即可。
语法¶
示例源模式¶
简单 case 语句¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
当过程中包含输出参数时¶
SnowConvert AI returns a variant with parameters set up as output parameters. So, for each return, SnowConvert AI will add a variant as a return value.
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
SECURITY (DEFINER | INVOKER)¶
描述¶
Amazon Redshift 存储过程中的 SECURITY 子句定义了该过程执行时的访问控制和权限上下文。这决定了该过程是使用所有者(创建者)还是调用者(调用过程的用户)的权限。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
VARIABLE DECLARATION¶
描述¶
Declare all variables in a block, except for loop variables, in the block's DECLARE section.
(Redshift SQL Language Reference Variable Declaration (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-structure.html#r_PLpgSQL-variable-declaration))
Note
Snowflake 完全支持变量声明。
语法¶
在 Redshift 中,CONSTANT 关键字用于防止执行过程中的变量重赋值。由于 Snowflake 不支持此关键字,因此在转换过程中会将其删除。这不会影响功能,因为逻辑不应尝试对常量变量重赋值。
Redshift 中的 NOT NULL 约束条件可确保变量不能被赋值为空值,并且需要一个非空的默认值。由于 Snowflake 不支持此约束条件,因此在转换过程中会将其删除。但会保留默认值以确保功能正常。
带有 Refcursor 的变量声明会转换为 Resultset 类型,详见 信息。
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题 ¶
未发现任何问题。
相关的 EWIs¶
SSC-FDM-PG0012:NOT NULL 约束条件已删除。对此变量赋值为 NULL 将不再导致失败。
TRANSACTIONS¶
COMMIT¶
描述¶
将当前事务提交到数据库。此命令使事务中的数据库更新永久生效。(Redshift SQL 语言参考 COMMIT (https://docs.aws.amazon.com/redshift/latest/dg/r_COMMIT.html))
语法
示例源模式¶
设置数据¶
Redshift¶
Query¶
Snowflake¶
Query¶
带 TRANSACTION 关键字的 COMMIT¶
Snowflake 不支持 TRANSACTION 关键字。但是,由于它不会对功能产生影响,因此只会将其删除。
Redshift¶
Query¶
Snowflake¶
Query¶
默认事务行为过程(无 NONATOMIC 子句)中的 COMMIT¶
To avoid out of scope transaction exceptions in Snowflake, the usages of COMMIT will be matched with BEGIN TRANSACTION.
当过程中有多个 COMMIT 语句时,将在每个 COMMIT 语句之后生成多个 BEGIN TRANSACTION 语句以模拟 Redshift 事务行为。
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
带有 NONATOMIC 行为的过程中的 COMMIT¶
通过使用设置为 true 的会话参数 AUTOCOMMIT,在 Snowflake 中模拟 Redshift 中的 NONATOMIC 行为。
Since the AUTOCOMMIT session parameter is assumed to be true by SnowConvert AI, the COMMIT statement inside NONATOMIC procedures is left as is.
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
已知问题¶
1. 嵌套过程调用中的 COMMIT
在 Redshift 中,如果在嵌套过程调用中指定了 COMMIT 语句,则该命令将提交当前和父作用域中先前语句中的所有待处理工作。Snowflake 不支持提交父作用域操作,当检测到这种情况时,会生成 FDM。
Redshift¶
Query¶
Snowflake¶
Query¶
已知问题¶
没有已知问题。
相关的 EWIs¶
SSC-FDM-RS0006:调用的过程包含 COMMIT/ROLLBACK 的使用情况,Snowflake 不支持在子作用域中修改当前事务。
ROLLBACK¶
描述¶
停止当前事务并丢弃该事务所做的所有更新。(Redshift SQL 语言参考 ROLLBACK (https://docs.aws.amazon.com/redshift/latest/dg/r_ROLLBACK.html))
语法
示例源模式¶
设置数据¶
Redshift¶
Query¶
Snowflake¶
Query¶
带 TRANSACTION 关键字的 ROLLBACK¶
Snowflake 不支持 TRANSACTION 关键字。但是,由于它不会对功能产生影响,因此只会将其删除。
Redshift¶
Query¶
Snowflake¶
Query¶
默认事务行为过程(无 NONATOMIC 子句)中的 ROLLBACK¶
To avoid out of scope transaction exceptions in Snowflake, the usages of ROLLBACK will be matched with BEGIN TRANSACTION.
当过程中存在多个事务控制语句时,将在每个语句后生成多个 BEGIN TRANSACTION 语句,以模拟 Redshift 事务行为。
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
带有 NONATOMIC 行为的过程中的 ROLLBACK¶
通过使用设置为 true 的会话参数 AUTOCOMMIT,在 Snowflake 中模拟 Redshift 中的 NONATOMIC 行为。
Since the AUTOCOMMIT session parameter is assumed to be true by SnowConvert AI, the ROLLBACK statement inside NONATOMIC procedures is left as is.
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
已知问题¶
1. 嵌套过程调用中的 ROLLBACK
在 Redshift 中,如果在嵌套过程调用中指定了 ROLLBACK 语句,则该命令将提交当前和父作用域中先前语句中的所有待处理工作。Snowflake 不支持提交父作用域操作,当检测到这种情况时,会生成 FDM。
Redshift¶
Query¶
Snowflake¶
Query¶
2. DDL 语句的 ROLLBACK
In Snowflake, DDL statements perform an implicit commit whenever they are executed inside a procedure, making effective all the work before executing the DDL as well as the DDL itself. This causes the ROLLBACK statement to not be able to discard any changes before that point, this issue will be informed using an FDM.
Redshift¶
Query¶
Snowflake¶
Query¶
已知问题¶
没有已知问题。
相关的 EWIs¶
SSC-FDM-RS0006:调用的过程包含 COMMIT/ROLLBACK 的使用情况,Snowflake 不支持在子作用域中修改当前事务。
SSC-FDM-RS0007: DDL statements perform an automatic COMMIT in Snowflake. ROLLBACK will not undo DDL-committed changes.
TRUNCATE¶
描述¶
在不进行表扫描的情况下从表中删除所有行(Redshift SQL 语言参考 TRUNCATE (https://docs.aws.amazon.com/redshift/latest/dg/r_TRUNCATE.html))
语法
示例源模式¶
设置数据¶
Redshift¶
Query¶
Snowflake¶
Query¶
默认事务行为过程(无 NONATOMIC 子句)中的 TRUNCATE¶
由于 TRUNCATE 语句在执行时会自动提交其所在的事务,因此在 Snowflake 中,为模拟此行为,任何使用该语句的地方都会生成 COMMIT 语句。
由于生成了 COMMIT 语句,因此相同的 BEGIN TRANSACTION 语句生成将应用于 TRUNCATE。有关更多信息,请查看 COMMIT 转换规范。
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
带有 NONATOMIC 行为的过程中的 TRUNCATE¶
通过使用设置为 true 的会话参数 AUTOCOMMIT,在 Snowflake 中模拟 Redshift 中的 NONATOMIC 行为。
Since the AUTOCOMMIT session parameter is assumed to be true by SnowConvert AI, the TRUNCATE statement inside NONATOMIC procedures is left as is, there is no need to generate a COMMIT statement because every statement is automatically committed when executed.
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
已知问题¶
1. 嵌套过程调用中的 TRUNCATE
在 Redshift 中,如果在嵌套过程调用中指定了 COMMIT 语句,则该命令将提交当前和父作用域中先前语句中的所有待处理工作。Snowflake 不支持提交父作用域操作,当检测到这种情况时,会生成 FDM。
Redshift¶
Query¶
Snowflake¶
Query¶
已知问题¶
没有已知问题。
相关的 EWIs¶
SSC-FDM-RS0006:调用的过程包含 COMMIT/ROLLBACK 的使用情况,Snowflake 不支持在子作用域中修改当前事务。
CONDITIONS¶
CASE¶
描述¶
Redshift 中的
CASE语句允许您根据条件返回值,从而在查询中启用条件逻辑。它有两种形式:简单形式和搜索形式。(Redshift SQL 语言参考 Conditionals:Case (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-conditionals-case))。
简单 case 语句¶
简单 CASE 语句根据操作数的相等性来提供条件执行。
Note
Snowflake 完全支持简单 case 语句。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
搜索 case 语句¶
Note
Snowflake 完全支持搜索 Case 语句。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
CASE(无 ELSE)¶
在 Redshift 中,当执行 CASE 表达式时,如果所有验证条件均不满足且未定义 ELSE,则会触发异常“CASE NOT FOUND”。在 Snowflake 中,代码会执行但不返回任何结果。在此场景中,为了在 Snowflake 中保持相同的功能,如果不满足任何 CASE 条件,将声明并执行同名异常。
Note
Snowflake 完全支持不含 ELSE 的 CASE。
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
IF¶
描述¶
此语句允许您根据特定条件做出决定。(Redshift SQL 语言参考 Conditionals: IF (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-conditionals-if))。
SnowConvert AI will add the parenthesis in the conditions and change the keyword ELSIF by ELSEIF since Redshift does not require the parenthesis in the conditions and ELSIF is the keyword.
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
LOOPS¶
描述¶
这些语句用于重复代码块直到达到指定条件。(Redshift SQL 语言参考 Loops (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-loops))。
CONTINUE¶
描述¶
如果 CONTINUE 条件为 true,循环可以继续执行,如果为 false,则停止循环。(Redshift SQL 语言参考 Conditionals: CONTINUE (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-loops))。
警告
Snowflake 对 CONTINUE 提供部分支持。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
Results¶
控制台输出 |
|---|
1 |
2 |
3 |
4 |
6 |
7 |
输出代码:¶
Snowflake¶
Results¶
控制台输出 |
|---|
1 |
2 |
3 |
4 |
6 |
7 |
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
EXIT¶
描述¶
当 WHEN 语句中定义的条件为 true 时,停止循环执行(Redshift SQL 语言参考 Conditionals: EXIT (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-loops))。
警告
Snowflake 对 EXIT 提供部分支持。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
FOR¶
语法¶
整数变体
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
SSC-EWI-PG0006: Reference a variable using the Label is not supported by Snowflake.
LOOP¶
描述¶
一个简单的循环定义了一个无条件循环,该循环会无限期重复,直到被 EXIT 或 RETURN 语句终止。(Redshift SQL 语言参考 Conditionals:Simple Loop (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-loops))。
警告
Snowflake 对简单循环提供部分支持。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
WHILE¶
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
CURSORS¶
CLOSE CURSOR¶
描述¶
关闭与 Open cursor 关联的所有空闲资源。(Redshift SQL 语言参考 Close Cursor (https://docs.aws.amazon.com/redshift/latest/dg/close.html))。
Note
Snowflake 完全支持此语法。
语法¶
示例源模式¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
FETCH CURSOR¶
描述¶
使用游标检索行。(Redshift SQL 语言参考 Fetch (https://docs.aws.amazon.com/redshift/latest/dg/fetch.html))
转换信息
示例源模式¶
设置数据¶
Redshift¶
Query¶
Snowflake¶
Query¶
Fetch into¶
Redshift 中的 FETCH into 语句在 Snowflake 中完全等效
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
已知问题¶
1.不支持不带目标变量的 Fetch
Snowflake 需要 FETCH 语句指定 INTO 子句,该子句中包含将要存储提取的行值的变量。如果在代码中找到未带 INTO 子句的 FETCH 语句,将生成 EWI。
输入代码:
输出代码:
已知问题¶
没有已知问题。
相关的 EWIs¶
SSC-EWI-PG0015: Fetch cursor without target variables is not supported in Snowflake
OPEN CURSOR¶
描述¶
在使用游标检索行之前,必须先将其打开。(Redshift SQL 语言参考 Open Cursor (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-cursors))。
Note
Snowflake 完全支持此语法。
语法¶
示例源模式¶
设置数据¶
Redshift¶
Query¶
Snowflake¶
Query¶
Open cursor(不带实参)¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
Open cursor(带有实参)¶
Cursor arguments have to be bound per each one of its uses, SnowConvert AI will generate the bindings, as well as reorder and repeat the passed values to the OPEN statement as needed to satisfy the bindings.
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
带有过程参数或局部变量的 Open cursor¶
The procedure parameters or local variables have to be bound per each one of its uses in the cursor query, SnowConvert AI will generate the bindings and add the parameter or variable names to the OPEN statement, even if the cursor originally had no parameters.
Redshift¶
Query¶
Result¶
Snowflake¶
Query¶
Result¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
DECLARE CURSOR¶
描述¶
定义新游标。使用游标一次从较大查询的结果集中检索几行。(Redshift SQL 语言参考 Declare Cursor (https://docs.aws.amazon.com/redshift/latest/dg/declare.html))。
Note
Snowflake 完全支持此语法。
语法¶
示例源模式¶
输入代码:¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。
DECLARE REFCURSOR¶
描述¶
refcursor数据类型仅包含对游标的引用。您可以通过将游标变量声明为refcursor类型的变量来创建游标变量(Redshift SQL 语言参考 Refcursor Declaration (https://docs.aws.amazon.com/redshift/latest/dg/c_PLpgSQL-statements.html#r_PLpgSQL-cursors))
Note
Snowflake 完全支持 Refcursor 声明。
语法¶
由于 Snowflake 不支持 REFCURSOR 数据类型,因此可通过将 REFCURSOR 变量转换为 RESULTSET 类型来复制其功能。用于打开 REFCURSOR 的查询被分配给 RESULTSET 变量,之后会创建一个新游标并将其链接到 RESULTSET 变量。此外,游标逻辑中对原始 REFCURSOR 的所有引用都会更新为使用新游标,从而复制原始功能。
示例源模式¶
情况:单次使用¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
情况:带有动态 SQL 的游标 ¶
输入代码:¶
Redshift¶
输出代码:¶
Redshift¶
情况:多次使用:¶
输入代码:¶
Redshift¶
输出代码:¶
Snowflake¶
已知问题¶
没有已知问题。
相关的 EWIs。¶
无相关的 EWIs。