设为首页 收藏本站
查看: 546|回复: 0

[经验分享] Oracle Function(函数) 和 同义词

[复制链接]

尚未签到

发表于 2016-7-30 13:56:44 | 显示全部楼层 |阅读模式
--__________________________________Function(函数)_______________________________
/*dual 表  是Oracle 中一个虚拟的表,有一行一列,所有者是sys,可以被数据库中所有的用户使用
用户不得插入数据, 是使用此表选择系统变量或计算一个表达式的值*/
--_________________________________转换函数(5)__________________
--1.to_char(d|n [.fmt]): 用于将日期和数字按指定的格式转化为varchar2()类型的数据.  d:日期  n:数字 fmt:日期或数字的格式
select to_char(sysdate,'yyyy-mm-dd')  格式日期 from dual;
select to_char(sysdate,'yyyy年mm月dd天') 格式日期 from dual;
select to_char(12.34567,'9999.99') 格式化数字  from dual;  12.35
select to_char(12.34567.'L9999.99') 格式化数字 from dual;   ¥12.35
--2.to_date(char [,fmt]):将字符串转化为日期数据类型
select to_date('2011-4-8','yyyy-mm-dd') - to_date('2011-4-10','yyyy-mm-dd')  日期差距 from dual;  --->2
--3.to_number(char);将包含数字的字符串转化为Number类型,从而实现运算
select to_numner('123')+2 求和 from dual;--->125
select '123'+2 求和 from dual; --->125    {Oracle 可以对数字字符串自动进行隐式转换}
--4.NVL: 将null值 替换为指定的值
nvl(expr1,expr2): ===> expr1!=null ? expr1:expr2;
NVL2(expr1,expr2,expr3):===> expr1!=null ? expr2:expr3;  --->记得是NVL2
--5.Decode:相当于 if; 将输入值与函数中的参数列表进行比较,根据输入值返回一个对应值。
--语法: decode(input_value,value,result [,value,result,value,result] [,default_result]);
update employees set salary=salary+ decode(deparment_id,20,100,30,80,40,120,20);  --->20 表示默认值 (找不到匹配的后)
--表示 department_id==20 ? 100:(department_id==30? 80 : (department_id==40 ? 120 :20));

--____________________________基本函数(6)_______________________
--1 获取系统的时间
select sysdate 当前系统的时间 from dual;
--2  add_months(d,n):在制定日期上添加月数后的值   d:表示 要操作的日期  n:表示月数
select add_months(sysdate,1) 新的日期 Form dual;  --返回 当前日期上月数+1后的日期
--3 months_between(d1,d2):返回两个日期之间的月份数
select sysdate  from dual;  ---返回  8-4月-11
select months_between('6-7月-11',sysdate) 相差的月份 from dual;  --- 返回 2.62636789   
select floor(months_between('6-7月-11',sysdate)) 相差的月份 from dual; --返回  2
--4 last_Day(d):返回制定日期月份后的最有一天
select sysdate 当前日期,last_day(sysdate) 当月最后一天 form dual;
--5 next_day(d,day):返回指定下星期几的日期  d:制定的日期  day:一周内的第几天
select sysdate 当前日期,next_day(sysdate,'星期五') 下个星期五是 from dual  --返回系统日期本周星期五的日期
--6 extract(fmt,from d):获取日期中指定特定部分
--1  获取当前时间中的 年 月 日
select sysdate, extract(year from sysdate) 年,extract(month from sysdate) 月,extract(day from sysdate)日 from dual;--> 12-4月-11 --- 2010 --- 4 ----12   
--2  在oracle 中日期是一个特殊的数字, 以天为单位;所以 可以进行 日期 + || - 数字=日期   日期-日期=数字
select sysdate 当前日期,sysdate+1 日期加数字,sysdate-1 日期减数字,sysdate-to_date('2011-7-6','yyyy-mm-dd') 日期减日期, floor(sysdate-to_date('2011-7-6','yyyy-mm-dd')) 日期差距取整 from dual;
--返回 8-4月-2011     9-4月-2011         7-4月-2011      2.62636789           2

--______________________________数学函数(7)_________________________________
--1.Abs:取绝对值
select abs(-1) form dual; --->1
--2.Ceil: 向上取整
select ceil (1.33) from dual;--->2
--3.Floor:向下取整
select floor(1.33) from dual;--->1
--4.Power:求幂
select power(2,3) from dual;--->8;
--5.Mod:取余
select mod(10,3) from dual;--->1
--6.Round:四舍五入
select round(12.126,2) from dual;--->12.13
--7.Trunc:截断
select trunc(12.126,2) from dual;--->12.12
三角函数 ....

--_______________________字符函数(9)_____________________
--1.Lower(c):小写转换
select lower('SccE') from dual;  ---> scce
--2.Upper(c):大写转换
select upper('scce') from dual; --->  SCCE
--3.Ltrim(c1[,c2]): 删除c1 左侧所包含的c2 任何字符,遇到不属于c2中的字符时 返回剩下的字符(c2 省略 默认表示空格)left trim;
select ltrim('  adminscce') from dual;--> adminscce  如果 c2 不写 表示 去除空格('  ')
select ltrim('adminscce','ad') from dual;--->minscce
--4.Rtrim(c1[,c2]):删除c1 右侧所包含的c2 任何字符,遇到不属于c2中的字符时 返回剩下的字符(c2 省略 默认表示空格) right trim;
select rtrim('adminscce  ') from dual;--> adminscce  如果 c2 不写 表示 去除空格('  ')
select rtrim('adminscce','scce') from dual;--->admin   
--5.Replace(c1,c2[,c3]):将c1中岀现c2都替换成c3;c3默认为空,如果c3为null,所有出现c2的地方都被删除,如果c2为null,则返回c1,如果c1为null,返回null
select replace('a*b*','*','/') from dual;--->a/b/
select replace('a*b*','*') from dual; --->ab
select replace('a*b*') from dual; ---> a*b*
select replace() from dual; ---->null     
--6.Instr(c1,c2): 在c1中搜索c2首次出现的位置, 找不到 返回 "0"
select instr('abcdbc','bc') from dual;--->2
--7.Substr(c,m[,n]):返回c的子串,m是子串的开始位置,n是子串的长度,省略n则截取从m开始的所有子字符串
select substr('scce',2,2) from dual; -->cc
--8.Concat(c1,c2):连接字符串
select concat('scc','e') from dual;   --->scce
--9.Length(c):返回字符串的长度
select length('scce') form dual; --->4;




----------------------------------同义词 ---------------------------------------
--1.方案同义词 :要权限  create  synonym  或者 create any synonym
grant create syonoym to scott;
grant create any synonym to scott;  
--获得权限
create [or replace] synonym  syn_dept for dept;  --为dept 表创建同义词 syn_dept

--2.公用同义词  :要权限  create pulic syonoym
grant create public synonym to scott;
create [or replace] public synonym  pubsyn_dept for dept;  --  pubsyn_dept  为名字
--3.方案同义词的使用
--1.scott使用自己的
select * from syn_dept;
--2.hr 使用 scott用户 创建的同义词
conn scott/tiger@scce;
grant select on dept to hr;  -- 要scott给hr 赋权限
conn hr/tiger@scce;     --自己登录后 拿着 scott的钥匙(方案) 开门后 查看资源
select * from scott.syn_dept;

--3 hr 为scoot用户中的资源创建 同义词  但是 必须要scott 给hr 权限 否则 创建了 使用 不了
conn hr/tiger@scce;
create or replace synonym syn_scott_dept for scott.dept;  --为scoot用户的dept资源创建 同义词
--  select * from syn_scott_dept; -->此时写会报错 没有权限反问    要下面 的操作
conn scott/tiger@scce;
grant select on dept to hr;   --scott 给  hr 权限
conn hr/tiger@scce;
select  * from syn_scott_dept;  --此时才有用
--4.公用同义词的使用  重要是要有权限 就 有了
conn hr/tiger@scce;
select * from pubsyn_dept;
conn scott/tiger@scce;
revoke select on dept from hr;  --移除了 hr 的select 权限
conn hr/tiger@scce;
select * from pubsyn_dept;  --报错没有 权限
--5.删除方案同义词
--1.scott 可以删除 自己的任何同义词
drop synonym syn_dept;
--2.scoot 要删除 别人中的方案同义词 必须要有 drop any synonym 权限
conn sys/admin@scce;
grant drop any synonym to scott;
conn scott/tiger@scce;
drop synonym syn_scott_dept;  --syn_scott_dept 是 hr 创建的同义词
--6.删除公用同义词   用户要有 drop public synonym 权限
conn sys/admin@scce;
grant drop public synonym to scott;
conn scott/tiger@scce;
drop public synonym pubsyn_dept;   --- 删除 名为 pubsyn_dept 公用同义词

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-251321-1-1.html 上篇帖子: ORACLE 使用UTL_SMTP包发送邮件 下篇帖子: Oracle 常用sql操作整理总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表