惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
U
Unit 42
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
F
Full Disclosure
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园_首页
The Register - Security
The Register - Security
G
Google Developers Blog
The Cloudflare Blog
博客园 - Franky
K
Kaspersky official blog
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
NISL@THU
NISL@THU
AI
AI
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Vercel News
Vercel News
T
Tor Project blog
P
Privacy International News Feed
D
Docker
I
Intezer
L
LangChain Blog
P
Proofpoint News Feed
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
博客园 - 聂微东
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
V
V2EX
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
The Hacker News
The Hacker News
T
Tenable Blog
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog

博客园 - 小兔快跑

实现线程中的参数传递 利用rank() 和 dense_rank() 来实现分类排名 利用Relations实现多DataTable的聚合 Web应用中实现发送带附件的电子邮件 为什么这样的SQL会锁记录? 在Word里实现禁止复制和选定 [VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” Word转pdf方法小结 ASP.NET生成WORD文档服务器部署注意事项 ASP.NET:页面保存为WORD出现的问题! 动态绑定图片url:数据绑定出现的问题 .NET对Excel的读写 .NET中的CString知识点 水滴石穿之页面遮罩层实现、向window.open()打开的窗口POST数据 动态加载和使用类型 WinForm 控件的事件委托剖析 如何:使用反射将委托挂钩 SVG常见问题汇总 水滴石穿之子页面的滚动条设置 表格的固定高度宽度问题 复制带格式的文本
原来数据库编程也可以这么美好!
小兔快跑 · 2008-10-20 · via 博客园 - 小兔快跑

在项目实际开发过程中,最近几次用到oracle中的函数Function、触发器和行列转换,发现有时候直接在数据库层次操作来得更方便

1.Function

说实在的,现在我还不知道怎么去写这个,只是从网上摘选了一段用上了。

由于项目开发过程中,需要直接在SQL把字符串按照分隔符变换为多条记录,具体代码如下:

Code

2.触发器

项目开发过程中,需要对业务对象的操作进行记录,这时候如果在应用层去做,可能有点麻烦,但是利用数据库的触发器就很好解决了问题

Code

Code

Code

这里需要注意的是,对于删除触发器,我们是无法获取删除的文件名的,这里触发器是为了防止脏读。

这是oracle的规定,不能对执行触发器的表进行操作。  
可以对new.xxx进行操作啊,

对于oracle行级触发器(for   each   row),不能对本表做任何操作,包括读取

原则:  
  在before   insert触发器中,可以实现对本表的访问;  
  在after   insert触发器中,不能实现对本表的访问;  
  在before/after   update/delete触发器中,都不能实现对本表的访问
  

这里所说的访问是指不能通过sql语句去访问本表,但是我们可以通过:old和:new来访问表的字段。 

另外再介绍一点

写oracle行级触发器时,不能操作本表,报"表 *** 发生了变化,触发器/函数不能读"的错误的解决办法
原因已经很明显了就是行级的触发器代码中不能操作该表,包括select,是挺郁闷的
当然解决方法就是要根据原因了,正因为限定了行级触发器的操作,只能选择表级的触发器了,但是在表级的触发器又不能获得:new和:old的值,那就只能采取两种触发器并用的方法了,并且还要包或者临时表加以辅助.

首先在行级触发器中将所需的,:new或者:old的值,写到包或者临时表中

然后在表级触发器中处理包或者临时表中已经写入的数据,操作成功后可以按照需求再删除临时表的数据.

3.行列转换

项目中有两种数据需要比较,不过一种是列形式,一种是行形式;

这样把其中一种直接转换,变成同样的形式,这样就方便比较了

Code


不过这里需要对比的列长达2000多列,估计数据库对组成的sql分析就占用很长时间,所以在项目实际应用中还是没有采用这样的办法,但是估计在少量的转换还是划算的

项目实际采用下面的方式

Code