Oracle是否具有SQL Server的表变量的等效项?

Oracle是否具有SQL Server的表变量的等效项?,oracle,Oracle,在SQL Server中,可以声明一个表变量declare@table table,该变量在脚本运行时生成,然后从内存中删除 Oracle有类似的功能吗?还是我一直在使用CREATE/DROP语句分割硬盘?是的 在表中声明表类型变量 PL/SQL声明块。表变量 也被称为表索引或 大堆table变量包含一个 列,该列必须是标量或 记录数据类型加上主键 键入二进制\整数。语法: 申报 类型名称是表的名称 列类型| 变量%类型| 表.列%TYPE [非空] 二元整数索引 -然后,要声明此类型的表变量,

在SQL Server中,可以声明一个表变量declare@table table,该变量在脚本运行时生成,然后从内存中删除

Oracle有类似的功能吗?还是我一直在使用CREATE/DROP语句分割硬盘?

是的

在表中声明表类型变量 PL/SQL声明块。表变量 也被称为表索引或 大堆table变量包含一个 列,该列必须是标量或 记录数据类型加上主键 键入二进制\整数。语法:

申报 类型名称是表的名称 列类型| 变量%类型| 表.列%TYPE [非空] 二元整数索引

-然后,要声明此类型的表变量,请执行以下操作: 变量名称类型名称

-为表变量赋值: 变量名称n.field名称:= “一些文本”;-“n”在哪里 索引值

参考:


您可能还想看看

是的,如果我能猜出表的作用,它确实有一个可以保存查询结果集的类型。发件人:您的程序可能如下所示:

procedure p( p_state in varchar2, p_cursor in out ref_cursor_type )
is
begin
    open p_cursor for select * from table where state = P_STATE;
end;

其中p_游标类似于表类型。正如已经回答的那样,在Oracle中存储结果集有很多选项。一般来说,Oracle PL/SQL比sqlserver脚本强大得多。

Oracle中的表变量与MS sqlserver中的表变量不同。 在oracle中,它就像java或c中的常规数组。但在MSSQLServer中,它与任何表都是一样的,可以称之为逻辑表。 但如果您希望oracle中的某些功能与SQLserver的表变量完全相同,则可以使用游标


关于

以下解决方案是我今天能做的最接近SQL Server的解决方案

对象:

CREATE OR REPLACE TYPE T_NUMBERS IS TABLE OF NUMBER; CREATE OR REPLACE FUNCTION ACCUMULATE (vNumbers T_NUMBERS) RETURN T_NUMBERS AS vRet T_NUMBERS; BEGIN SELECT SUM(COLUMN_VALUE) BULK COLLECT INTO vRet FROM TABLE(CAST(vNumbers AS T_NUMBERS)); RETURN vRet; END; 查询:

--Query 1: Fixed number list. SELECT * FROM TABLE(ACCUMULATE(T_NUMBERS(1, 2, 3, 4, 5))); --Query 2: Number list from query. WITH cteNumbers AS ( SELECT 1 AS COLUMN_VALUE FROM DUAL UNION SELECT 2 AS COLUMN_VALUE FROM DUAL UNION SELECT 3 AS COLUMN_VALUE FROM DUAL UNION SELECT 4 AS COLUMN_VALUE FROM DUAL UNION SELECT 5 AS COLUMN_VALUE FROM DUAL ) SELECT * FROM TABLE( ACCUMULATE( (SELECT CAST(COLLECT(COLUMN_VALUE) AS T_NUMBERS) FROM cteNumbers) ) );
表变量/数组和ref游标之间存在差异。我认为最初的问题是关于前者的。如何声明一个包含多个列的表?示例中:包含两列的表。Number和Varchar2。通过创建记录表,其中记录包含row@MikeTSQL产品中的表具有行,而不是记录。请不要使用术语“记录”来混淆其他人。记录是属于某个项目的数据集合,因此可以是单个表中的单行,也可以是多个表中的多个链接行。因此,术语记录是正确的Oracle不是我的强项,但表变量似乎是Oracle的一个子集将VNumber强制转换为它已有的类型的目的是什么?