PL / SQL:在创建表之前检查架构中是否有足够的空间

问题描述 投票:0回答:3

我正在使用一个过程,该过程使用繁重的查询(运行〜1 hr)来创建表。查询类似于“从表中选择*”,表中的列可以更改。通常,事实证明,架构中没有可用空间来创建表,因此我得到了一个例外,这是徒劳的时间,我需要再次进行相同的计算。

我想做的是:-将查询结果存储在光标的临时段中;-尝试使用光标创建表。如果发生异常(空间不足),请删除一个特殊的空间保存表以释放架构中的表空间;-尝试从光标再次创建表。

我曾尝试使用动态SQL解决此问题,但这会导致复杂化,而问题似乎有一个简单的解决方案。我面临的主要问题是没有明显的方法可以使用游标创建表。

我有某种简单的解决方案会以某种方式错过吗?也许光标是解决此问题的错误方法?

oracle plsql dynamic-sql
3个回答
1
投票

我能想到的两件事:

  • 让数据库完成肮脏的工作
    • 又名只需看一下Oracle管理本身即可享受DBA的工作
    • 如何?让表空间autoextend
  • 向用户授予该表空间上的无限配额]
  • 这里(以特权用户身份连接):

SQL> select file_name, tablespace_name From dba_data_files;

FILE_NAME                                        TABLESPACE_NAME
------------------------------------------------ -----------------------------
C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF      USERS
C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF     SYSAUX
C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF   UNDOTBS1
C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF     SYSTEM

SQL> alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF'
  2  autoextend on
  3  maxsize unlimited;

Database altered.

SQL> alter user scott quota unlimited on users;

User altered.

SQL>

0
投票

我同意@OldProgrammer-这是一个设计问题。删除和重新创建表是一种反模式。


0
投票

我想做的:-将查询结果存储在游标中的临时段中; -尝试使用光标创建表。如果发生异常(空间不足),请删除一个特殊的空间保存表以释放架构中的表空间; -尝试从光标再次创建表。

© www.soinside.com 2019 - 2024. All rights reserved.