Oracle Sql:可以在其中创建临时表的过程

0 sql oracle stored-procedures

我是Oracle Sql的新手,面临一个问题:

我想在程序中创建一个临时表.

喜欢:

CREATE PROCEDURE P
  AS
  BEGIN
    CREATE TEMPORARY TABLE A(ID int);
  END P;
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误

如何在过程中创建临时表.

我已经在stackoverflow上看到了其他答案,但这不能正确回答我的问题你能帮帮我吗?

Jus*_*ave 8

为什么要首先在存储过程中创建临时表?

在其他数据库(例如SQL Server和MySQL)中创建临时表是相对常见的.在Oracle中做同样的事情是非常非常罕见的.几乎在每个您都想在Oracle中创建临时表的情况下,都有一种更好的架构方法.DBA堆栈上有一个线程,它讨论了临时表的替代方法以及Oracle中通常不需要它们的原因.

以编程方式,您可以使用动态SQL创建对象

CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Run Code Online (Sandbox Code Playgroud)

但是,如果动态创建临时表,则对该表的每个引用也需要通过动态SQL - 您将无法SELECT针对该表编写简单语句.Oracle中临时表的定义是全局的,因此每个会话都可以看到它.如果您有两个不同的会话都试图创建相同的表,第二个会话将收到错误.如果您希望表在不同的会话中具有不同的定义,则会遇到更多问题.