oracle 随记

关于用户权限:
将一个用户的表授权给另一个用户
grant 权限 on tableName to userName
grant select,insert,update,delete on 表名 to 用户名
关于同义词:
这个功能蛮不错的有点类似与用户权限的功能。
这个功能主要是在该用户下建立某个对象的实例。有点类似与我们 a = new Abcd()
中的a类似于代理。
create synonym 参数名 for 完整的表明
create synonym a_tbl for A.a_tbl

START WITH.条件1..CONNECT BY PRIOR..条件2.(WHERE..条件3.)
这个在百度上解释已经很多了,但是个人觉得他们总是说上一条记录.到底是什么让人很迷茫,所以个人就实验了下.得出一下结论.
这个语句的意思是:
以(条件1)为基础开始根据(条件2)做递归查询.
条件1中可以作为类似我们平常写where条件语句一样写,可以在后面写多个and.(这个条件主要是去查询你会从什么地方开始,是根节点还是子节点开始查询,这将直接影响到后面条件2的写法.)
条件2,是作为递归条件的条件.其中PRIOR关键字的意思表在PRIOR之后的一个字段是作为上一条记录的字段.而另一个就是当前记录字段.如PRIOR ID = PID 则表示.(上一条记录的id作为当前记录的Pid)
从别人的地方看到的是说...条件3是过滤条件.但是个人经过多次测试发现.(用WHERE是根本不行的,只能用AND+条件3)条件3是个废材.几乎起不到什么过滤作用.比如说我在用条件1和2查询来所有的树形结构后.我咱条件3中条件一个enabled=1(显示作用)但是查询出来的结果还是存在enabled不为1的.(这点我不知道是什么原因,但是有一点.如果说我们是从子节点往根查询的话,如果子节点为enabled=0的话就不是我们要的,可能来说条件3会过滤掉他,但是他的父节点确实enabled=1的.所以条件3个人觉得和涵盖到条件1中.直接屏蔽掉.)
好开始说条件1和条件2的关联.
个人猜想:(因为不能单独使用条件1或条件2).数据先是通过条件1来过滤掉我们不需要的查询基础(这为A表).然后再查询出整个表(这是B表).PRIOR 关键字后的字段则是A表中的字段(也就是上一条记录的字段).PRIOR ID = PID这的意思也就是说从这个表中查询到 PID=A.ID的字段(这边在作为后续的C表也就用来存放合适数据的表.之后还要这表带入从A开始查询然后把合理的数据全部条件到C表中).所以在从子节点查询开始和根节点查询开始,条件2所写的条件是不一样的.

当然这边还存在一个问题.就是如果是从子节点查询开始的话那么,他会把所有子节点的的父节点都罗列出来.也就是说如果是同一个父节点下的子节点.那么这个父节点可能就会出现多次.所以需要做distinct来去除重复的字段.

今天又发现一个东西 在写SQL的时候如果遇到要判断我们一般是用 CASE WHEN THEN END这种方式..还有另外一个函数我忘记了.就说这个吧.首先CASE WHEN (条件1AND条件2).这样可以写多个条件并列.不过前提是你的把CASE 后面的这个参数写到 WHEN后面来 和我们平常的IF判断一样..

以上见解纯属个人见解.并不能代表一定是这样.因为本人英文水平很差所以没去看官方的解释.本文纯属个人工作中的学习总结,如果有高手有心看到本文章请多多指教...
谢谢浏览...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值