今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢

思来想去觉得还是在sql里直接删除比较合适,

为什么呢?

第一,涉及数据库的读写操作一定要遵从ACID原则,

第二,java中操作单个删除太麻烦,而且占用内存,多次打开数据库链接,造成资源浪费

第三,好久没写储存过程了,太咸

下面是这个表的结构

create table T_BRAND_CLASS
(
ID VARCHAR2(32) not null,
BRAND_NAME VARCHAR2(100),
BRAND_IMG VARCHAR2(32),
BRAND_INITLAL VARCHAR2(10),
BRAND_ISHOT VARCHAR2(10),
BRAND_ISSTICK VARCHAR2(10),
constraint PK_T_BRAND_CLASS primary key (ID)
USING INDEX ENABLE
); comment on table T_BRAND_CLASS is
'品牌分类';
create table T_BRAND_TYPE
(
ID VARCHAR2(32) not null,
BRAND_CLASS_ID VARCHAR2(32),
TYPE_NAME VARCHAR2(100),
constraint PK_T_BRAND_TYPE primary key (ID)
USING INDEX ENABLE
); comment on table T_BRAND_TYPE is
'品牌型号';
create table T_BRAND_SPECIFICATION
(
ID VARCHAR2(32) not null,
BRAND_ID VARCHAR2(32),
BRAND_CC VARCHAR2(32),
CC_TYPE NUMBER,
constraint PK_T_BRAND_SPECIFICATION primary key (ID)
USING INDEX ENABLE
); comment on table T_BRAND_SPECIFICATION is
'品牌规格';
create table T_BRAND_SERIES
(
ID VARCHAR2(32) not null,
SERIES_NAME VARCHAR2(100),
SPECIFCATION_ID VARCHAR2(32),
SERIES_YEAR VARCHAR2(10),
constraint PK_T_BRAND_SERIES primary key (ID)
USING INDEX ENABLE
); comment on table T_BRAND_SERIES is
'品牌车系';

大概的可以看出来这个一个树状结构的表,彼此的关联就是一个对方的id,温习了下储存过程常用的关键字

cursor :游标 紧跟后面的sql查询的结果会自动给定义的变量赋值,数据结构类似lua里的table,
BEGIN:BEGIN和end之间的代码会动态的执行;
for .. in .. loop:循环
v_sql VARCHAR2(1000);:定义数据类型
v_sql:= :赋值方式
execute immediate .aa.USING bb :aa是一个要执行的sql语句,bb是一个aa中的输出占位符填充数据
看完上面大概后一个简单的储存过程就可以写出来了,如下传入一个表名的id 就可以删除对应表数据下面的所有关联数据

create or replace PROCEDURE DEL_brand_class(istable_id  in VARCHAR2)
is
v_sql VARCHAR2(1000);
typeid VARCHAR2(1000);
speid VARCHAR2(1000);
serid VARCHAR2(1000);
cursor cur_tableid is
select a.id as id,
b.id as typeid,
c.id as speid,
d.id as serid
from t_brand_class a
left join T_BRAND_TYPE b on a.id = b.BRAND_CLASS_ID
left join T_BRAND_SPECIFICATION c on b.id = c.BRAND_ID
left join T_BRAND_SERIES d on c.ID = d.SPECIFCATION_ID
where a.id = istable_id;
BEGIN
for rec_id in cur_tableid loop v_sql:='delete from t_brand_class where id =:1';
typeid:='delete from T_BRAND_TYPE where id = :1';
speid:='delete from T_BRAND_SPECIFICATION where id = :1';
serid:='delete from T_BRAND_SERIES where id = :1';
execute immediate v_sql USING rec_id.id;
execute immediate typeid USING rec_id.typeid;
execute immediate speid USING rec_id.speid;
execute immediate serid USING rec_id.serid;
end loop;
commit;
END DEL_brand_class;

oracle存储过程删除树状结构的表数据的更多相关文章

  1. lua 怎样输出树状结构的table?

    为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据. ccmlog.lua local function __tostring(value, indent, vmap) local str ...

  2. oracle 树状结构递归 PL/SQL输出控制 包括空格输出控制

    树状结构 存储过程中通过递归构建,类似BBS回帖显示,代码共三段: 建表,插入数据,创建存储过程显示: 1.create table article(id number primary key,con ...

  3. 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  4. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  5. EntityFrameworkCore 单表树状结构配置

    数据结构 public class TreeNode { [Key] public long Id { get; set; } public string NodeName { get; set; } ...

  6. 用Django ORM实现树状结构

    前言 之前看对于用关系数据库实现树状结构的方法就知道一直做自关联的表,但是感觉自关联查询太慢了,最近看到一篇文章,感觉视野开拓了好多,文章:数据库表设计,没有最好只有最适合来自:微信. 下面就针对这里 ...

  7. openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】

    1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...

  8. oracle中的树状查询

    oracle中的树状查询 工作中经常会遇到将数据库中的数据以树的形式展现的需求.以下我们来看一下该需求在Oracle中如何实现. 首先我们需要有一个树形的表结构(当然有时候会出现表结构不是典型的树形结 ...

  9. 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

    树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...

随机推荐

  1. 《JavaScript模式》一书中提到的一些坑

    1. 应当用数组字面量来创建数组,而不是用new Array() //反模式 var a = new Array('itsy', 'bitsy', 'spider'); //用字面量 var a = ...

  2. 如何将Spring Boot项目打包部署到外部Tomcat

    1.项目打包     项目开发结束后,需要打包部署到外部服务器的Tomcat上,主要有几种方式. (1)生成jar包 cd 项目跟目录(和pom.xml同级)mvn clean package## 或 ...

  3. jzoj5925

    tj:這道題題解有錯 水法ac代碼如下: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll t,n ...

  4. jzoj5879. 【NOIP2018提高组模拟9.22】电路图 B

    tj:一道好題 看區間操作可以想到線段樹 並聯操作公式:a1∗a2/(a1+a2)a1*a2/(a1+a2)a1∗a2/(a1+a2) 串聯操作公式:a1+a2a1+a2a1+a2 我們發現,一個區間 ...

  5. thinkphp5的mkdir() Permission denied问题

    最近一直在用tp5写项目,在此遇到的问题也比较多.今天来谈谈“mkdir() Permission denied”错误. 你如果不仅仅写代码,还得部署到线上,那么这个tp5的这个错误,你有很大概率会遇 ...

  6. Lucence工作原理

    lucence 是一个高性能的java全文检索工具包,他使用倒排序文件索引结构,改结构和相应的生成算法如下: 一.设有两篇文章1和2      文章1的内容为:Tom lives in guangzh ...

  7. [Swift实际操作]七、常见概念-(7)日历Calendar和日期组件DateComponents

    本文将为你演示日历和日期组件的使用.通过日历的日期部件,可以获得日期的各个部分. 首先引入需要用到的界面工具框架 import UIKit 初始化一个日期对象,其值为当前的日期. let dt = D ...

  8. Sql Sever 2012数据库更名失败 error:5030

    打开SQL Server 2012数据库时,对HzWind_2MW数据库名修改为HzWind_2MW_GEM,结果出现如图1所示: 图1 数据库更名时出现error:5030 数据库不能重名名5030 ...

  9. 【BZOJ2082】【POI2010】Divine divisor 假的pollard-rho

    题目大意:给你$m$个数$a_i$,定义$n=\Pi_{i=1}^{m}a_i$.将$n$分解质因数为$\Pi p_i^{k_i} $,$p_i$是质数.请输出$2^{max(k_i)}-1$,以及存 ...

  10. CAS优缺点

    cas优点:如一描述在并发量不是很高时cas机制会提高效率.cas缺点:1.cpu开销大,在高并发下,许多线程,更新一变量,多次更新不成功,循环反复,给cpu带来大量压力.2.只是一个变量的原子性操作 ...