我有这样的场景,我需要创建一个存储过程,其中列将动态生成。基于此列,应创建临时表。 实际上,我在SQL Server中执行的这种情况已将SQL Server数据库迁移到Oracle。
由于
答案 0 :(得分:8)
如果要动态创建表,则需要使用动态SQL
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE table_name( col1 number, col2 number )';
END;
话虽如此,直接移植为Oracle创建临时表的SQL Server代码几乎肯定是错误的。它的工作方式与SQL Server代码的工作方式不同。
答案 1 :(得分:2)
也许我有点讨论主题,但试着分析一下你真正想要实现的目标。我一直在和几个使用T-TSQL的人一起工作,SQL服务器中使用的模式与Oracle不同。只是不要试图一对一地完全重写您的代码。 它不起作用。
例如,临时表的使用在Oracle中被认为是一种糟糕的设计(在大多数情况下)。如果在T-SQL中使用临时表,通常会在Oracle中使用游标。
还要记住,SQL和PL / SQL是编译语言(它不是真正的脚本)。您不能(重新)在PL / SQL包中创建表,然后在某些(或其他包)中使用它。 在Oracle中修改对象时,必须在后台重新编译所有依赖代码。 对于从SQL Server进入Oracle的人来说,这是一个令人沮丧的原因。
情况并非糟糕,它与它似乎有所不同。