在 SQL Server 中,您可以声明一个表变量 (
DECLARE @table TABLE
),该变量在脚本运行时生成,然后从内存中删除。
Oracle有类似的功能吗?或者我是否坚持使用
CREATE
/DROP
语句对我的硬盘进行分段?
是的。
在 a 中声明 TABLE TYPE 变量 PL/SQL 声明块。表变量 也称为索引表或 大批。表变量包含一个 列必须是标量或 记录数据类型加上主键 类型 BINARY_INTEGER。语法:
声明 类型 type_name 是表 (列类型 | 变量%TYPE | 表.列%TYPE [不为空] 按二进制整数索引;
-- 然后声明一个这种类型的 TABLE 变量: 变量名类型名;
-- 为 TABLE 变量赋值: 变量名(n).字段名 := '一些文字'; -- 其中“n”是 指数值
参考:http://www.iselfschooling.com/syntax/OraclePLSQLSyntax.htm
您可能还想看看全局临时表
下面的解决方案是我今天能做的最接近 SQL Server 的解决方案。
对象:
创建或替换类型 T_NUMBERS 是数字表; 创建或替换函数累加(vNumbers T_NUMBERS) 返回 T_NUMBERS 作为 vRet T_NUMBERS; 开始 选择总和(COLUMN_VALUE) 批量收集到 vRet FROM TABLE(CAST(vNumbers AS T_NUMBERS)); 返回vRet; 结尾;
查询:
--查询1:固定号码列表。 选择 * 从表(累积(T_NUMBERS(1,2,3,4,5))); --查询2:查询的号码列表。 与 cteNumbers AS ( 从 DUAL UNION 中选择 1 作为 COLUMN_VALUE 从 DUAL UNION 中选择 2 作为 COLUMN_VALUE 从 DUAL UNION 中选择 3 作为 COLUMN_VALUE 从 DUAL UNION 中选择 4 AS COLUMN_VALUE 从 DUAL 中选择 5 作为 COLUMN_VALUE ) 选择 * 从表( 积累( (选择 CAST(收集(COLUMN_VALUE) AS T_NUMBERS) 来自 cteNumbers) ) );
oracle 中变量中的表与 MS SQLServer 中的表变量不同。 在oracle 中,它就像java 或c# 中的常规数组。但在MS SQLserver中它与任何表相同,您可以将其称为逻辑表。 但如果你想要 Oracle 中的某些东西与 SQLserver 的表变量完全相同,你可以使用游标。
问候
可以使用Oracle的全局临时表。
create global temporary table TempDemo(
Name varchar2(200),
Address varchar2(200)
)
on commit preserve rows;
insert into TempDemo values('Shahriar','Vatapara Rajshahi, Bangladesh');
insert into TempDemo values('Zainab','Laxmipur Rajshahi, Bangladesh');
insert into TempDemo values('Sujon','Mohisbathan Rajshahi, Bangladesh');
select * from TempDemo;
delete from TempDemo;
drop table TempDemo;
commit;
rollback;