ORA-14452: 试图创建, 变更或删除正在使用的临时表中的索引

news2024/12/28 5:54:30

在编写一个test存储过程中出现一个错误报告:ORA-14452: 试图创建, 变更或删除正在使用的临时表中的索引,代码如下

create or replace PROCEDURE TMP_TRANSCRIPT AS 
  str_sql varchar2(500);
  v_flag number:=0; --标识
begin
 
  --判断临时表是否存在
  SELECT COUNT(*) into v_flag FROM User_Tables WHERE table_name = 'TEMP_TABLE';
  
  if v_flag=0  then
  -- 创建临时表
  str_sql := 'create global temporary table temp_table (   
       name varchar2(20),
       yuwen number,
       shuxue number,
       yingyu number
    ) on commit preserve rows';
  execute immediate str_sql; 
  -- 使用临时表
  str_sql := 'insert into temp_table select name,
              sum(case when kecheng='||'''语文'''||' then fenshu else 0 end) as "语文",
              sum(case when kecheng='||'''数学'''||' then fenshu else 0 end) as "数学",
              sum(case when kecheng='||'''英语'''||' then fenshu else 0 end) as "英语"
              from TRANSCRIPT group by name';
  execute immediate str_sql;
  
  --提交事务
  --commit;
  
  else 
    dbms_output.put_line('ok');
    -- 删除临时表
    str_sql := 'drop table temp_table';
    execute immediate str_sql;
  --提交事务
  --commit;
   END IF;
 
END;

第二遍运行的时候提示在drop table时出错

解决方法:

1.  truncate table temp_table  

2.  如果上面这种方法没用可以尝试  

     a.先从 dba_objects / user_objects中查询到该表的object_id:

        select object_id from dba_objects where object_name=upper('temp_table');

     b.根据查到的object_id知道使用该表的session:
        select * from v$lock where id1=&object_id;
     c.在从v$session视图中查到该session的SID和SERIAL#:
        select * from v$session where sid=3;
     d.杀掉这些进程:
        alter system kill session ‘SID,SERIAL#’;

但在使用第二种方法时出现了一个新问题:SQL 错误: ORA-00027: 无法终止当前会话

 

直接重启sqldeveloper就能解决

问题分析:起初分析是因为在存储过程insert结束后未执行commit导致事务未提交进而无法终止当前会话,所以在第二遍执行的时候无法进行drop操作

但是在insert后面添加commit之后发现依旧会出现ORA-14452: 试图创建, 变更或删除正在使用的临时表中的索引

这是什么原因呢?经过一番查找发现在drop后面添加commit就不会再出错误提示了

个人猜测会不会是因为drop有隐式提交,第一次执行完后虽然drop成功但是还未提交成功导致

至于为什么truncate又可以呢,这就涉及到了truncate和drop的区别

truncate table(截断表) 是清空一个表,是一个DDL语言,效率高,它与delete有如下区别。
delete是DML语言;
delete时会触发与表相关的触发器,而truncate不会;

在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表了。它的主要功能就是彻底删除数据,使其不能进行回滚。这里我打个比方大家就立刻能明了它的作用。大家众所周知,当我们在自己的PC(person computer)上删除某一个文件,它并没有彻底删除而是进入了回收站,你要在回收站中再将其删除才算彻底清除。截断表就相当于直接将数据从pc上删除,而不会放入回收站。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【版本管理 | Git 】Git最佳实践系列(一) —— LFS .gitignore 最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

华大基因基因检测产品发布,助力早发冠心病风险评估

冠状动脉性心脏病,简称冠心病。冠心病作为导致猝死的常见原因之一,近年来备受关注。早发冠心病是指冠心病发病年龄男性≤55岁,女性≤60岁。早发冠心病是一种发病时心肌损伤严重的冠心病,由于心肌缺血,还有可能会导致急…

基于C#实现双端队列

话说有很多数据结构都在玩组合拳,比如说:块状链表,块状数组,当然还有本篇的双端队列,是的,它就是栈和队列的组合体。 一、概念 我们知道普通队列是限制级的一端进,另一端出的 FIFO 形式&#…

类和对象(4)——补充内容+DateOJ题

Date类型的OJ 一,static成员例题 二,DateOJ题一,[计算日期到天数转换](https://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded?tpId37&&tqId21296&rp1&ru/activity/oj&qru/ta/huawei/question-ranking)1…

Python 自动化用处太大了!|python自动整理文件,一键完成!

随着时代的发展及人工智能的到来,Python 自动化办公能力几乎已成为每个岗位的必备技能! 而且到处可见的抖音、朋友圈铺天盖地宣传 Python 可以轻松达到办公自动化,并且学习没门槛,是真的吗? 我很负责的告诉大家&#…

数字化转型如何赋能企业实现数字化增值?

随着科技的不断发展,数字化转型已经成为了企业营销的重要趋势。数字化转型不仅可以提高企业的运营效率,还可以更好地满足消费者的需求,提升企业的市场竞争力。 一、数字化转型可以提高企业营销的精准性 在传统的企业营销中,营销人…

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络,就让我想起的就是一张图。我在网上可以为所欲为,反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式,来举一个例子。 从tcp三次握手来说,…

GIT版本控制和常用命令使用介绍

GIT版本控制和常用命令使用介绍 1. 版本控制1.1 历史背景1.2 什么是版本控制1.3 常见版本控制工具1.4 版本控制的分类 2 Git介绍2.1 Git 工作流程2.2 基本概念2.3 文件的四种状态2.4 忽略文件2.5 Git命令2.5.1 查看本地git配置命令2.5.2 远程库信息查看命令2.5.3 分支交互命令2…

【网络】传输层 --- 详解TCP协议

目录 一、协议段格式及其策略确认应答(ACK)机制6个标志位超时重传流量控制滑动窗口1、先谈滑动窗口一般情况2、再谈特殊窗口 拥塞控制拥塞窗口 延迟应答&&捎带应答面向字节流粘包问题 二、三次握手和四次挥手三次握手为什么是3次?不是2、4、5、6次呢 四次挥…

鸿蒙开发-ArkTS 语言-状态管理

鸿蒙开发-ArkTS 语言-基础语法 3. 状态管理 变量必须被装饰器装饰才能成为状态变量,状态变量的改变才能导致 UI 界面重新渲染 概念描述状态变量被状态装饰器装饰的变量,改变会引起UI的渲染更新。常规变量没有状态的变量,通常应用于辅助计算…

1. git入门操作

1. git入门操作 1、基本名词解释 图片 名词含义index索引区,暂存区master分支名,每个仓库都有个master,它作为主分支。branch其他分支,我们可以把master分支上的代码拷贝一份,重新命名为其他分支名work space就是我…

竞赛python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库,用 PyTorch 编写,为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

如何找出excel中两列数据中不同的值(IF函数的用法)

第一部分,举例: 例1: 如下图所示,A列和B列是需要比较的数据,C列为对比规则:IF(A2B2,"是","否") 示例图 例2:给B列的成绩评等级 C列的规则: IF(B2>85,&qu…

RPC和HTTP的区别

目录 1、RPC是什么 1.1 概念 1.2 RPC的组成部分 1.3 常见的 RPC 技术和框架 1.4 RPC的工作流程 2、HTTP是什么 2.1 概念 2.2 HTTP的消息格式 2.3 HTTP响应状态码有哪些 3、⭐RPC和HTTP的区别 小结 1、RPC是什么 1.1 概念 RPC(Remote Procedure Call&am…

全国甲骨文识读大会用到哪些竞赛软件

2023年,全国甲骨文识读大会第1季在“中华字都安阳”举办,天纵竞赛软件为此次高端知识竞赛提供软件支持。 甲骨文识读大会分为海选、初赛、复赛、决赛4个阶段,不分年龄、性别、职业、地域,并邀请国内甲骨文和殷商文化方面专家学者组…

Unity-类-Vector

Vector矢量 是一个基本的数学概念,它允许你描述方向和大小。在游戏和应用中,矢量通常用于描述一些基本属性,如角色的位置、物体移动的速度或两个物体之间的距离。 矢量算术是计算机编程很多方面(如图形、物理和动画)的基础,深入了解这一主题对于充分发挥 Unity 的功能很有…

python实现炫酷的屏幕保护程序!

今天写了桌面保护程序。先来看看效果吧。 完全可以作为屏保程序了,老方式:以下是实现的代码: from tkinter import *from time import strftime​def update_time():global i, j current_time strftime(%H:%M:%S)time_label.config(textcu…

软件工程简明教程

软件工程简明教程 何为软件工程? 1968 年 NATO(北大西洋公约组织)提出了软件危机(Software crisis)一词。同年,为了解决软件危机问题,“软件工程”的概念诞生了。一门叫做软件工程的学科也就应…

前车之鉴: 适用于所有select选择框的 全选反选逻辑,如何只用单个change事件优雅完成

文章目录 实际效果1.1 效果展示1.2 核心功能 Show CodeQ & A彩蛋 实际效果 1.1 效果展示 1.2 核心功能 区别网上其他思路,我这里不需要使用原生点击事件,将全选反选逻辑收敛在一个change事件上 此前已经看过一些全选逻辑同学尝试过后,会…