关于oracle:ubuntu配置samba解决linux的svn使用舒适问题

个人感觉,svn的命令行应用起来没有git那么舒服,然而windows上的svn GUI客户端TortoiseSVN 应用十分不便。因而对于常常在虚拟机中做服务程序开发然而又不得不用svn的同学来说,联合linux开发环境和TortoiseSVN 来治理代码版本就显得尤其有用。 装置配置sambaubuntu上应用apt-get装置 apt-get install samba samba-common<!--more--> 敞开防火墙 systemctl stop ufw应用vim /etc/samba/smb.conf命令编辑samba配置文件,在配置文件最初增加即可 [homes] comment = qk_python Directories browseable = no path = /root/qk_python valid users = root read only = no增加用户,除了root用户外也能够输出其余的存在用户名。 smbpasswd -a root重启samba服务失效 systemctl restart smbd在Windows下运行窗口输出\\加上IP,例如:\\192.168.1.177\root。在弹出的窗口,输出刚刚增加的用户名和明码,就能够拜访Linux的文件目录了。 配置svn因为配置samba的时候配置成了非只读的,因而能够间接checkout相应的svn我的项目到Linux文件目录中。实现之后对svn做以下配置: 勾选svn的网络驱动类型 TortoiseSVN->Settings->Icon Overlays 勾选Driver Types中的”Network drives”显示svn我的项目绿色图标: TortoiseSVN->Settings->Icon Overlays 抉择Shell而后就能够显示绿色图标了,接下来就欢快的应用TortoiseSVN治理Linux代码吧。 记得帮我点赞哦! 精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!! 朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。 我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭 如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。 职场亮哥文章列表:更多文章 自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

August 29, 2020 · 1 min · jiezi

关于oracle:常用Oracle-SQL集锦

罕用dml和query开并行--开并行ALTER SESSION FORCE PARALLEL DML PARALLEL 16;ALTER SESSION FORCE PARALLEL QUERY PARALLEL 16;--关并行ALTER SESSION DISABLE PARALLEL DML ;ALTER SESSION DISABLE PARALLEL QUERY;索引开并行drop index IDX_SB_SBZT_LRRQ;create index IDX_SB_SBZT_LRRQ on SB_SBZT (LRRQ, CWLX_DM, SWJG_DM) tablespace TS_GS_SB_IDX pctfree 20 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ) parallel 6;alter index IDX_SB_SBZT_LRRQ noparallel;查看ASM-- 查看asm的各个disk group是否超过80%-- name:name of the disk group-- total_mb:total capacity of the disk group(in megabytes)-- free_mb:unused capacity of the disk group(in megabytes)select t.name,t.TOTAL_MB /1024, round(100 * (t.TOTAL_MB - t.FREE_MB) / t.TOTAL_MB, 2)||'%' from v$asm_diskgroup t;<!--more--> ...

August 29, 2020 · 4 min · jiezi

关于oracle:Oracle定时任务

定时工作查问查问oracle定时工作,能够通过: -- 所有用户的定时工作SELECT * FROM dba_jobs;-- 本用户的定时工作select * from user_jobs;查问后果中,what字段个别寄存存储过程名称(或者具体的存储过程内容),BROKEN=N示意工作执行中,BROKEN=Y示意进行。要依据存储过程名称,查问存储过程内容,能够通过: select * from user_source where type = 'PROCEDURE'and name = 'YXTESTJOB'order by name, line;这样,就能够梳理出定时工作到底做了些什么事件。 定时工作创立定时工作个别用于定时的执行存储过程。所以先创立存储过程,而后再创立工作。创立存储过程: -- 创立存储过程create or replace procedure YxtestJob isbegin insert into test1(id, name) values(1, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));end;创立定时工作: -- 通过脚本创立定时工作declare job_no number;begin sys.dbms_job.submit(job => job_no, what => 'YxtestJob;', next_date => to_date('19-08-2020 15:53:00', 'dd-mm-yyyy hh24:mi:ss'), interval => 'TRUNC(sysdate, ''mi'') + 1/(24*60)'); commit;end;这里,job_no会由数据库主动调配,并且会避开已被应用过的数字,避免反复。 留神:what对应的值,必须有分号结尾。并且对应的存储过程必须是失常状态的没有分号结尾的报错: interval距离的设置阐明每分钟执行:TRUNC(sysdate,'mi') + 1/(24*60)TRUNC(sysdate,'mi')示意日期截取到分钟,1/(2460)示意: 1天/(2460)=24小时/(24*60)=1/60小时=1分钟 ...

August 19, 2020 · 1 min · jiezi

关于oracle:oracle函数表复制CT和IS

CT和IS(表复制)1、CT(create table ... as)语法 create table <new table> as select * from <exists table><br/> 案例 查问emp表中deptno为10的数据,创立表emp10 (创立出emp10表) create table emp10 as select * from emp where deptno=10; <br/><br/> 2、IS (insert into ...select..)语法 insert into table2(f1,f2...) select v1,v2....from table1 <br/> 案例 查问emp表中deptno为50的数据,插入到emp10表中(emp10已存在) insert into emp10(empno,ename,job) select empno,ename,job from emp where deptno=50;<br/><br/>

August 17, 2020 · 1 min · jiezi

关于oracle:oracle函数表复制CT和IS

CT和IS(表复制)1、CT(create table ... as)语法 create table <new table> as select * from <exists table><br/> 案例 查问emp表中deptno为10的数据,创立表emp10 (创立出emp10表) create table emp10 as select * from emp where deptno=10; <br/><br/> 2、IS (insert into ...select..)语法 insert into table2(f1,f2...) select v1,v2....from table1 <br/> 案例 查问emp表中deptno为50的数据,插入到emp10表中(emp10已存在) insert into emp10(empno,ename,job) select empno,ename,job from emp where deptno=50;<br/><br/>

August 17, 2020 · 1 min · jiezi

关于oracle:oracle子查询关联子查询与非关联子查询的区别

关联子查问和非关联子查问1、关联子查问阐明外层查问的每一行数据,外部查问都会再查问一次。 <br/> 特点 1、子查问不能独自运行,是和外查问相干的2、先执行外层查问,再执行内层查问 <br/> 示例如下例,在子查问中用到了外层查问的字段(t.deptno),且不能独自运行(因为用到了外层查问的字段) select t.*, t.rowid from dept t where exists (select 1 from emp e where e.deptno = t.deptno); <br/><br/> 2、非关联子查问阐明子查问先将值查问进去,而后再返回给外层查问。 <br/> 特点 1、子查问能独自运行2、先执行内层查问,再执行外层查问 <br/> 示例如下所示,子查问的语句能够独自执行--》 select max(e.deptno) from emp e select t.*, t.rowid from dept t where t.deptno = (select max(e.deptno) from emp e); <br/>

August 10, 2020 · 1 min · jiezi

关于oracle:oracle子查询关联子查询与非关联子查询的区别

关联子查问和非关联子查问1、关联子查问阐明外层查问的每一行数据,外部查问都会再查问一次。 <br/> 特点 1、子查问不能独自运行,是和外查问相干的2、先执行外层查问,再执行内层查问 <br/> 示例如下例,在子查问中用到了外层查问的字段(t.deptno),且不能独自运行(因为用到了外层查问的字段) select t.*, t.rowid from dept t where exists (select 1 from emp e where e.deptno = t.deptno); <br/><br/> 2、非关联子查问阐明子查问先将值查问进去,而后再返回给外层查问。 <br/> 特点 1、子查问能独自运行2、先执行内层查问,再执行外层查问 <br/> 示例如下所示,子查问的语句能够独自执行--》 select max(e.deptno) from emp e select t.*, t.rowid from dept t where t.deptno = (select max(e.deptno) from emp e); <br/>

August 10, 2020 · 1 min · jiezi

关于oracle:oracle集合运算UNIONUNION-ALL

在Oracle中提供了三种类型的汇合操作: 并(UNION)、交(INTERSECT)、差(MINUS) UNION:求并,重复记录只显示一次。UNION ALL:求并集,显示所有记录信息。INTERSECT:求交加MINUS:返回两个查问后果的差集 以下咱们来介绍下对于oracle的汇合运算: 一、数据筹备依据emp表数据创立emp10表 create table emp10 as (select * from emp where deptno=10);以后表数据: emp10表 emp表 二、oracle汇合运算1、UNION阐明 取并集,重复记录只显示一次 写法select * from emp union select * from emp10; 后果 2、UNION ALL阐明取并集,显示所有数据 写法select * from emp union all select * from emp10; 后果 3、INTERSECT阐明求交加,两个汇合中公共的局部 写法 select * from emp intersect select * from emp10; 后果 4、MINUS阐明求差集,即返回的是emp中有,emp10中没有的数据 写法select * from emp minus select * from emp10; 后果 ...

August 2, 2020 · 1 min · jiezi

oracle运维08内存使用情况分析查看

1、SGA、PGA应用状况查问;select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from(select 'SGA' name,(select sum(value/1024/1024) from v$sga) total,(select sum(bytes/1024/1024) from v$sgastat where name='free memory')free from dual)unionselect name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from (select 'PGA' name,(select value/1024/1024 total from v$pgastat where name='aggregate PGA target parameter')total,(select value/1024/1024 used from v$pgastat where name='total PGA allocated')used from dual);2、内存使用率;-- pctused: 使用率select * from (select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from(select 'SGA' name,(select sum(value/1024/1024) from v$sga) total,(select sum(bytes/1024/1024) from v$sgastat where name='free memory')free from dual)unionselect name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from (select 'PGA' name,(select value/1024/1024 total from v$pgastat where name='aggregate PGA target parameter')total,(select value/1024/1024 used from v$pgastat where name='total PGA allocated')used from dual) unionselect name,round(total,2) total,round((total-free),2) used,round(free,2) free,round((total-free)/total*100,2) pctused from (select 'Shared pool' name,(select sum(bytes/1024/1024) from v$sgastat where pool='shared pool')total,(select bytes/1024/1024 from v$sgastat where name='free memory' and pool='shared pool') free from dual)unionselect name,round(total,2)total,round(total-free,2) used,round(free,2) free,round((total-free)/total,2) pctused from (select 'Default pool' name,( select a.cnum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 total from x$kcbwds a, v$buffer_pool p where a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=(select value from v$parameter where name='db_block_size')) total,(select a.anum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 free from x$kcbwds a, v$buffer_pool pwhere a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=(select value from v$parameter where name='db_block_size')) free from dual)union select name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from (select 'KEEP pool' name,(select a.cnum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 total from x$kcbwds a, v$buffer_pool p where a.set_id=p.LO_SETID and p.name='KEEP' and p.block_size=(select value from v$parameter where name='db_block_size')) total,(select a.anum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 free from x$kcbwds a, v$buffer_pool pwhere a.set_id=p.LO_SETID and p.name='KEEP' and p.block_size=(select value from v$parameter where name='db_block_size')) free from dual)unionselect name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from (select 'RECYCLE pool' name,( select a.cnum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 total from x$kcbwds a, v$buffer_pool p where a.set_id=p.LO_SETID and p.name='RECYCLE' and p.block_size=(select value from v$parameter where name='db_block_size')) total,(select a.anum_repl*(select value from v$parameter where name='db_block_size')/1024/1024 free from x$kcbwds a, v$buffer_pool pwhere a.set_id=p.LO_SETID and p.name='RECYCLE' and p.block_size=(select value from v$parameter where name='db_block_size')) free from dual)unionselect name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from(select 'DEFAULT 16K buffer cache' name,(select a.cnum_repl*16/1024 total from x$kcbwds a, v$buffer_pool p where a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=16384) total, (select a.anum_repl*16/1024 free from x$kcbwds a, v$buffer_pool pwhere a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=16384) free from dual)unionselect name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from(select 'DEFAULT 32K buffer cache' name,(select a.cnum_repl*32/1024 total from x$kcbwds a, v$buffer_pool p where a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=32768) total, (select a.anum_repl*32/1024 free from x$kcbwds a, v$buffer_pool pwhere a.set_id=p.LO_SETID and p.name='DEFAULT' and p.block_size=32768) free from dual)unionselect name,total,total-free used,free, (total-free)/total*100 pctused from (select 'Java Pool' name,(select sum(bytes/1024/1024) total from v$sgastat where pool='java pool' group by pool)total,( select bytes/1024/1024 free from v$sgastat where pool='java pool' and name='free memory')free from dual)unionselect name,Round(total,2),round(total-free,2) used,round(free,2) free, round((total-free)/total*100,2) pctused from (select 'Large Pool' name,(select sum(bytes/1024/1024) total from v$sgastat where pool='large pool' group by pool)total,( select bytes/1024/1024 free from v$sgastat where pool='large pool' and name='free memory')free from dual)order by pctused desc);3、查看内存应用的其它指标select * from v$sga_dynamic_components;select * from v$pgastat;-- 查问share pool的闲暇内存select a.*,round(a.bytes/1024/1024,2) M from v$sgastat a where a.NAME = 'free memory';-- 通过上面的sql查问占用share pool内存大于10M的sqlSELECT substr(sql_text,1,100) "Stmt", count(*), sum(sharable_mem) "Mem", sum(users_opening) "Open", sum(executions) "Exec" FROM v$sql GROUP BY substr(sql_text,1,100) HAVING sum(sharable_mem) > 10000000;-- 查问一下version count过高的语句SELECT address, sql_id, hash_value, version_count, users_opening, users_executing, sql_text FROM v$sqlarea WHERE version_count > 10;

July 9, 2020 · 3 min · jiezi

PLSQLRebuild-index-和-Rebuild-Index-区别

看完这章你会学习到以下内容: 区别在那?针对大表做索引重建的时候,要注意什么?区别:1、当rebuild 时一般对原先索引进行INDEX FAST FULL SCAN。2、当rebuild online的时不用原先索引而执行TABLE ACCESS FULL3、rebuild和rebuild online都会发生sort,即需要用到temp表空间。4、rebuild 会阻塞dml语句而rebuild online则不会。5、rebuild online时系统会产生一个SYS_JOURNAL_xxx的IOT类型的系统临时日志表,所有rebuild online时索引的变化都记录在这个表中,当新的索引创建完成后,把这个表的记录维护到新的索引中去,然后drop掉旧的索引,rebuild online就完成了。 素材来源: 1.索引rebuild和rebuild online时要慎重 2.Rebuild index 对DML的影响3.ORACLE中index的rebuild 4.记录一则rebuild index消除索引碎片的效果

June 26, 2020 · 1 min · jiezi

PLSQLHWM-高水位-含义解决之道

看完这章你会学习到以下内容: HWM是什么意思?HWM有何影响?HWM在哪里可以查询?HWM问题如何解决?HWM是什么意思? A)HWM指的是所有oracle的segments 都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。 反过来讲,HWM说明还有多少没有被使用的数据块分配给这个segment。 数据块 - 区 - 段 - 表空间 HWM有何影响? B) 全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何数据。 即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插入时使用HWM以上的数据块,此时HWM会自动增大。仅有DML(比如delete,insert)操作时,高水位线只会增长,不会降低。具体来说,由于程序使用的delete语句不回收使用过的空间,数据虽然删除了,但是高水位线却没有降低,仍然处于之前的水位。 C) 查看用户表是否高水位?第一种方法:用User_tables 中的 Blocks,empty_Block 和num_rows方法查看一张表里面的数据块有多少。 SELECT blocks, --该表曾经使用过的数据块的数目,即水线 empty_blocks, --代表分配给该表,但是在水位线以上的数据块,即从来没有使用过的数据块 num_rowsFROM user_tablesWHERE table_name = ‘table_name’; 第二种方法:在SYS用户里操作查询数据字典,如果SYS有赋予权利给其它用户的话也行,输入如下: SELECT TABLESPACE_NAME ,BYTES/1024/1024 AS FREE_MB -- 已用的 ,MAXBYTES/1024/1024 AS MAX_MB FROM DBA_DATA_FILES; 原文素材提供:1.ORACLE 11g 生产中高水位线(HWM)处理2.Oracle 高水位(HWM)回收原理及操作方法

June 26, 2020 · 1 min · jiezi

PLSQL基础练习-14-下

14.有如下两张表:交易表deli_t: 日期Busi_date 交易时间Exch_time 客户编号Cust_piy_no 交易类型Exch_type 产品代码Prd_no 交易量Del_amt 机构编号Org_no20170101 93102 0312003 证券买入 00001 1000 031220170101 103102 0312003 证券买入 00002 500 031220170101 133102 0312003 证券卖出 00003 800 0312...... 20171231 143102 0320004 期权买入 00004 500 0320客户信息表info_t: 机构编号Org_no 机构名称Org_name0312 黄埔东路0320 农林下路... 0306 中年广场需求1: 请写一段筒单的sql,提取出201712月每个部门每天各种交易类型的交易量给业务部门.展示字段为:日期、机构名称、证券买入当日交易量、证券卖出当日交易量分析: 1.用Where语句首先判断日期是否等于201712月2.然后观察字段内容得知,涉及两张表,需要关联,用Inner Join SELECT d.busi_date AS 日期, i.org_name AS 机构名称, SUM(CASE WHEN d.exch_type='证券买入' THEN d.del_amt END) AS 证券买入当日交易量, SUM(CASE WHEN d.exch_type='证券卖出' THEN d.del_amt END) AS 证券卖出当日交易量 FROM deli_t d JOIN info_t i ON d.org_no=i.org_no WHERE SUBSTR(d.busi_date,1,6)='201712' -- d.busi_date 为字符串类型 GROUP BY d.busi_date,i.org_name;需求2: ...

June 25, 2020 · 1 min · jiezi

PLSQL-练习题6-银行日常业务

看完这章你会学习到以下内容: 解题的思路解题的方法问题1: 解题思路: 1.YTD 数据按照产品名分类聚合求和(Group by + Sum函数) 2.产品名称出自TblProduct表,月份出自TblPayments,两表关联。 3.关联后用With...AS 子查询套入查询 4.列数比行数多,通常都是行列转换的结果 创建两张表格1.tblpayment表格创建语句 --- tblpayment 创建语句:CREATE TABLE TBLPAYMENTS (SID VARCHAR2(10), PAYMENTTIME DATE, PRODUCTID VARCHAR2(10), AMOUNT NUMBER(10,0), PAYMENTSTATUS VARCHAR2(10), SALES VARCHAR2(10), REGION VARCHAR2(10), DELAYWEEKS VARCHAR2(20) ); insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-1', to_date('02-01-2019 12:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-1', 30, 'Paid', '张三', '华南', '每日按要求更新');insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-2', to_date('02-02-2019 12:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-2', 60, 'Waiting', '张三', '华南', '每日按要求更新');insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-3', to_date('02-03-2019 22:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-3', 90, 'Paid', '李四', '华东', '每日按要求更新');insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-4', to_date('04-03-2019 15:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-1', 100, 'Waiting', '张三', '华南', '每日按要求更新');insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-5', to_date('02-04-2019 12:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-2', 200, 'Waiting', '李四', '华南', '每日按要求更新');insert into TBLPAYMENTS (SID, PAYMENTTIME, PRODUCTID, AMOUNT, PAYMENTSTATUS, SALES, REGION, DELAYWEEKS)values ('S-6', to_date('22-05-2019 17:20:30', 'dd-mm-yyyy hh24:mi:ss'), 'P-3', 3000, 'Paid', '张三', '华东', '每日按要求更新'); 2.tblproduct表格创建语句 ...

June 24, 2020 · 3 min · jiezi

Oracle-数据库-对象命名规范

看完这章你会学习到以下内容: 什么时候用的最多,这样做的好处?不同对象一般的命名规范编写目的 使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承!总领:不要用中文标识,一般用英文进行翻译使用,或者用中文首字母。 2.1表(Table) 一般表采用“所处层+t_+模块名+_+表义名” 格式构成。 若数据库中只含有单个模块,命名可采用“所处层+t_+表义名”格式构成。 2.2临时表(Temporary Table) 临时表采用“所处层+t_tmp_+表义名” 格式构成。 2.3关联表(Relative Table) 关联表命名为"所在层Re_表A_表B"格式构成. Re是Relative的缩写,表A和表B均采用其表义名或缩写形式。 3.1 主键 任何表都必须定义主键 表主键命名为:“pk+_+表名(或缩写)+_+主键字段” 如“pk_dept_deptno”等。 3.2.外键 表外键命名为: “fk+_+表名(或缩写)+_主表名(或缩写)+_+主键字段” 如“fk_dept_deptno_Empdetno”等。 3.3 CHECK约束 CHECK约束命名为: “chk+_+CHECK约束的列名(或缩写)” 3.4 UNIQUE约束 UNIQUE约束命名为: “unq+_+UNIQUE约束的列名(或缩写)” 3.5 索引 索引的命名为:“idx+表名(或缩写)+_+列名”。 4.触发器 AFTER型触发器 :系统名+tr_+<表名>_+ **_+[_row] _BEFORE型触发器 :系统名+tr_+<表名>_+bef__+[_row] _*INSTEAD OF型触发器 :系统名+ti_+<表名>+_+_*+[_row] 5.**_视图 视图命名以**系统名vw_+模块名 **作为前缀,其他命名规则和表的命名类似 6.序列 序列命名以seq_+含义名组成 7.同义词 同义词命名**与其基础对象的名称一致 但要去除其用户前缀或含有远程数据库链接的后缀以“syn+_+某张表表名**”组成 8 存储过程 存储过程命名由“系统名+sp+_+存储过程标识(缩写)”组成 存储过程标识要以实际含义的汉语拼音的首字符构成,并用下划线分割各个组成部分。 如增加代理商的帐户的存储过程为“sfsp_ZJDLSZH”。 9.函数 函数命名由“系统名+f+_+函数标识”组成 10.包 包命名由“系统名+pkg+_+包标识”组成 11.用户及角色用户命名由“系统名称+_+user+_+名词(或缩写)或名词短语(或缩写)”组成 角色命名由“系统名称+_+role+_+名词(或缩写)或名词短语(或缩写)”组成 12.数据库链接数据库链接命名由“远程服务器名+_+数据库名+_+link”组成 例如:table_name@DB_Link; 若远程服务器名和数据库名一致,上式“_+数据库名”部分省去 ...

June 24, 2020 · 1 min · jiezi

PLSQL-练习题3-前多少百分比划等级

创建表T_GOOGS,插入7行语句。 CREATE TABLE T_GOOGS(GOODS_TYPE VARCHAR2(10),GOODS_NAME VARCHAR2(20),PRICE NUMBER(5));INSERT INTO T_GOOGS VALUES('手机','华为mate',2999);INSERT INTO T_GOOGS VALUES('手机','苹果ipone',7999);INSERT INTO T_GOOGS VALUES('手机','小米',1999);INSERT INTO T_GOOGS VALUES('水果','车厘子',79);INSERT INTO T_GOOGS VALUES('水果','葡萄',79);INSERT INTO T_GOOGS VALUES('水果','苹果',12);INSERT INTO T_GOOGS VALUES('电脑','金士顿',499);SELECT * FROM T_GOOGS;结果如下图: 现要求:按照价格升序排列,按照价格的前20%,定义为低档;按照价格的20%到85%为中档,剩下的则为高档。 解题思路: 1)分不同的档次,一定要用Case When。 2)前20%如何找出来 -> 小于序号最大值*20% ->创建序号列 ->按照价格升序 -> 分析函数 第一步:新添加一列按价格排序的序号列,用分析函数。 WITH TB AS (SELECT T.*,ROW_NUMBER()OVER(ORDER BY PRICE) AS RANK_NUM FROM T_GOOGS T )第二步:对比排名数字要小于原表里最大序号的20%,20%-85%,85%以上。 SELECT TB.* ,CASE WHEN RANK_NUM <= (SELECT MAX(RANK_NUM) FROM TB)*0.2 THEN '低档' -- 筛选前20%的物品 WHEN RANK_NUM <= (SELECT MAX(RANK_NUM) FROM TB)*0.85 AND RANK_NUM > (SELECT MAX(RANK_NUM) FROM TB)*0.2 THEN '中档' -- 筛选前20%到85%的物品 ELSE '高档' END AS RANK_Percent -- 剩下的15%物品FROM TB最后的结果: ...

June 24, 2020 · 1 min · jiezi

PLSQL-练习题5多条件限定-And字段1字段2

这里直接可以用子查询和关联做。 原表与结果: SELECT * FROM EMP ORDER BY DEPTNO DESC; 如果先用Deptno分组再求最小值。 这里的关键是两个合并条件进行筛选,因为这个是分组后再求每个分组的最小值,唯一值 如果只匹配SAL,那有个部门的最小值恰好是其他部门的最小值,则会返回多个员工的信息。 方法一: 这可以理解,相当于And(Deptno,Sal)做一个合逻辑运算。 SELECT * FROM EMPWHERE(DEPTNO,SAL) IN (SELECT DEPTNO,MIN(SAL) FROM EMP GROUP BY DEPTNO);字段对应着字段的 Where 后面的字段和后面的Select子查询字段要一样。 Where(Deptno,Sal) =Select Deptno,Min(sal) From 方法二:表左连接 把挑选出来的每个部门的最低工资求出来,然后作为临时表A SELECT * FROM EMP EJOIN(SELECT DEPTNO,MIN(SAL) AS MIN_SAL FROM EMP GROUP BY DEPTNO ) AON E.DEPTNO = A.DEPTNOAND E.SAL = A.MIN_SAL; 2020年5月30日更新: 方法三: 分析函数,用Row_number按照部门然后薪酬升序排序,然后套用子查询取值为1 SELECT * FROM (SELECT E.* ,ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY SAL ASC) AS RN FROM EMP E)T WHERE T.RN =1;

June 24, 2020 · 1 min · jiezi

PLSQL-练习题6添加汇总行的两种方法

问题:统计部门的名称,以及对应的人数,添加到最后一列汇总原始结果,没有汇总列: SELECT D.DNAME,COUNT(*) AS 人数 FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO GROUP BY D.DNAME 方法一原理: 两张表的上下合并Union all,其中一个表即是原表,还有一个只有一行汇总表。 我这边添加一个字段名和原表一样,但值等于总结,用As语句赋值。 SELECT '总计' AS DNAME,COUNT(DISTINCT EMPNO)from EMP;结果将两张表合并一起,但注意先后顺序。 SELECT D.DNAME,COUNT(*) AS 人数 FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO GROUP BY D.DNAME UNION all SELECT '总计' AS DNAME,COUNT(DISTINCT EMPNO)from EMP; 方法二原理: 用函数Rollup和Nvl空值转换。 SELECT nvl(D.DNAME,'总计') as DNAME,COUNT(*) AS 人数 FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO GROUP BY rollup(D.DNAME); ...

June 24, 2020 · 1 min · jiezi

PLSQl-练习题2Groupby-多个字段不一定返回唯一值

有以下两张表,一张是交易表一张客户信息表 需求是提取出201712月每天第一个下单的客户。最后一个下单的时间信息。 展示字段为:日期、第一个下单时间、第一个下单客户、最后下单时间、最后下单客户。 分析:第一个下单和最后一个下单,分别可以用Max和Min函数得出。 下单的客户和下单信息都在同一张表,因此不用做其它表关联。 根据: 第一笔下单时间 (唯一) - > 第一笔下单的客户 (√) 最后一笔下单时间 (唯一)-> 最后一笔下单的客户 (√) 一个错误的示范: 如果为了要让客户编号出现,便自行添加到Group by后面。 那这样就不只返回最早和最晚的下单用户,反倒把当天所有的人都返回。 SELECT d.busi_date, d.cust_piy_no, MIN(exch_time) AS min_exch_time, MAX(exch_time) AS max_exch_time FROM deli_t d WHERE SUBSTR(d.busi_date, 1, 6) = '201712' GROUP BY d.busi_date, d.cust_piy_no 因此,当我们首先找到一个最小(最早)下单日期,最大(最晚)下单日期。然后,我们做表的自身连接,用唯一的交易时间作为表的关联(On)去匹配对应的客户信息。 SELECT tmp.busi_date AS 日期, d1.exch_time AS 第一个下单时间, d1.cust_piy_no AS 第一个下单客户, d2.exch_time AS 最后下单时间, d2.cust_piy_no AS 最后下单客户 FROM ( SELECT d.busi_date, MIN(exch_time) AS min_exch_time, MAX(exch_time) AS max_exch_time FROM deli_t d WHERE SUBSTR(d.busi_date,1,6)='201712' -- d.busi_date 为字符串类型 GROUP BY d.busi_date -- 找到了最早最晚下单的, ) tmp JOIN deli_t d1 ON d1.busi_date=tmp.busi_date AND d1.exch_time=tmp.min_exch_time -- 第一个下单 JOIN deli_t d2 ON d2.busi_date=tmp.busi_date AND d2.exch_time=tmp.max_exch_time -- 最后一个下单 ORDER BY tmp.busi_date;第二种方法可以一分为二,即将最早下单时间和客户信息作为表1(table a), 然后再计算出最晚下单时间和客户信息作为表2(table b). 然后table a union all table b. ...

June 24, 2020 · 1 min · jiezi

PLSQL-练习题1计算满足条件的人数

问题:求每个部门工资高于部门平均工资的员工数量占整个部门人数的百分比 分析:这里所有的信息都来自EMP表,不用做表连接。 其次,要新增一列按每个部门的平均工资,这里就用分析函数Avg()Over(Partiton by... ...) 接着,要计算百分比。分子是高出平均工资的人数,分母是整个部门的人数 关键字: 1)计算满足某条件的人数 累计求和 2)生成字段百分比字段 难点之一: 如何写出高出平均工资的人数?且保留有整张表所有人数的Count() 解决方法: CASE WHEN 满足的Count +1 否则0; 然后用全表作为子查询 注意: 不要用Count , 因为这个只计数,并不会把符合条件的都求和 SELECT A.DEPTNO, TO_CHAR(ROUND(SUM(CASE WHEN A.SAL > A.AVG THEN 1 ELSE 0 END) / COUNT(*) * 100, 2), '99D99') || '%' AS 百分比 -- 因为要突出Count(*)是总人数,所以子查询需要E.* FROM (SELECT E.*, AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG FROM EMP E) A GROUP BY A.DEPTNO

June 24, 2020 · 1 min · jiezi

SQL-常用函数-第三集-字符函数

看完这章你会掌握以下内容。 INSTR 和 SUBSTR 经典组合套用场景TRIM,LTRIM,RTRIM 不带参数和带参数的区别Replace 函数替换不存在的字符,是否报错*INSTR函数语法(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1,可正可负(正向逆向) J 出现的位置,默认为1 SQL> select instr("abcde",'b'); 结果是2,即在字符串“abcde”里面,字符串“b”出现在第2个位置。如果没有找到,则返回0;不可能返回负数 SBUSTR(str,pos); 就是从pos开始的位置,一直截取到最后。还有一种比较常用的是: SUBSTR(str,pos,len); 这种表示的意思是,就是从pos开始的位置,截取len个字符(空白也算字符),pos默认为1。 经典练习题1: 从字符串中'1#qfq#3df#520#d234#dlaj#' 查找第3个#号和第4个#号之间的字符串 两个函数的嵌套使用,Substr和Instr Substr 截取字符 Instr 查找字符所在位置,返回位置数值。 SUBSTR('1#qfq#3df#520#d234#dlaj#', 起始位置, 截取长度)INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)+1 --起始位置INSTR('1#qfq#3df#520#d234#dlaj#','#',1,4)-INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)-1 -- 截取长度SELECT SUBSTR('1#qfq#3df#520#d234#dlaj#', INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)+1, INSTR('1#qfq#3df#520#d234#dlaj#','#',1,4)- INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)-1) FROM dual; 经典练习题2: 从字符串中'dfas#dffr#saf#fdad#fsfa#ds#dfa' 查找最后一个#号后面的字符串 select substr('dfas#dffr#saf#fdad#fsfa#ds#dfa',Instr('dfas#dffr#saf#fdad#fsfa#ds#dfa','#',-1,1)+1 )from dualselect instr('ds#as#dfa','#',-1,1) from dual; -- 计数位置方向始终从左往右select substr('ds#as#dfa',6) FROM DUAL; LTrim,Trim,RTrim 函数本身有两种用法,一是不带参数,二是带参数。-- TRIM 函数的基本用法:SELECT TRIM(' AS '),LTRIM(' AS '),RTRIM(' AS ') FROM DUAL;SELECT TRIM(' A S ')FROM DUAL;不带截取参数,就是截取字符串里的空格。 ...

June 23, 2020 · 1 min · jiezi

SQL-常用函数第七集-分析函数重点

看完这章你会学习到以下内容: 和group by 的区别分析的搭配(聚合,排序,位移)ORDER BY 累计求和属性 Q1: 和group by 分组有什么区别? A1:Over(Partition by)它可以在数据中进行分组然后 计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值 SELECT E.DEPTNO,AVG(SAL) FROM EMP E GROUP BY DEPTNO; SELECT E.*, AVG(SAL)OVER(PARTITION BY DEPTNO) AS 平均工资 FROM EMP E; 1.函数为聚合函数(AVG,SUM,COUNT) 1.FUNCTION_NAME(<参数>,…) OVER (PARTITION BY 表达式,… ) -- 分组求值2.FUNCTION_NAME(<参数>,…) OVER (ORDER BY 表达式 <ASC DESC> ) -- 整体数据未做分组,先排序,在求累计求值3.FUNCTION_NAME(<参数>,…) OVER (PARTITION BY 表达式,… ORDER BY 表达式 <ASC DESC> ) -- 先分组,按组内排序,对组内求累计求值 -- PARTITION BY 1.查看员工表中员工信息以及对应部门的总人数 /* SELECT * FROM EMP; SELECT DEPTNO, COUNT(1) FROM EMP GROUP BY DEPTNO; SELECT E.*, T.CNT FROM EMP E JOIN (SELECT DEPTNO, COUNT(1) AS CNT FROM EMP GROUP BY DEPTNO) T ON E.DEPTNO = T.DEPTNO; */ SELECT E.*, COUNT(EMPNO) OVER (PARTITION BY DEPTNO) AS CNT FROM EMP E; -- ORDER BY 2.对员工表的工资从低到高排序,求累计应发放薪资 SELECT E.*, SUM(SAL) OVER (ORDER BY SAL) FROM EMP E; 区别 SELECT E.*, SUM(SAL) OVER (ORDER BY SAL,EMPNO) FROM EMP E;---- 按照每个部门的工资从高到低排序,计算每个部门的累计工资 ...

June 23, 2020 · 2 min · jiezi

SQL-常用函数第五集-日期函数

看完这章你会学习以下: Months_BETWEEN 两个日期的顺序NEXT_DAY 返回日期的注意事项--ADD_MONTHS(d,n),在某一个日期d上,加上指定的月数n,返回计算后的新日期。d表示日期,n表示要加的月数(n可以为负值) SELECT ADD_MONTHS(SYSDATE, 1), ADD_MONTHS(DATE'2019-08-30', -6), ADD_MONTHS(DATE'2020-08-30', -6) FROM DUAL; --LAST_DAY(d),返回指定日期当月的最后一天 SELECT LAST_DAY(SYSDATE),LAST_DAY(DATE'2019-08-30') FROM DUAL; -- MONTHS_BETWEEN (date1, date2),用于计算date1和date2之间有几个月 SELECT MONTHS_BETWEEN(TO_DATE('2014-3-21', 'yyyy-mm-dd'), TO_DATE('2014-1-10', 'yyyy-mm-dd')) mon_diff FROM DUAL; --注意:日期可以加减数字,表示加减多少天;日期减去日期表示相隔多少天;日期不能相加 SELECT DATE'2019-08-30'+6, DATE'2019-08-30'-6, DATE'2019-08-30'-DATE'2019-08-16' FROM DUAL;注意:Months_Between的第一个日期要大于第二个日期,否则返回负数。 Next_day注意:如果今天是星期六,如果要查询下一个星期六,则返回下周的星期六;如果要查询下一个星期日,则返回值是这个周的星期日。 --NEXT_DAY(d,date2[Mon,Tues,... ..]),返回指定日期的接下(指定日期)日子 SELECT NEXT_DAY(DATE'2019-08-30','friday') FROM DUAL; SELECT NEXT_DAY(SYSDATE,1) FROM DUAL;Date强制转化注意: 日期只能相减,返回两者的天数。 功能相当于Months_Between,但不能相加! --注意:日期可以加减数字,表示加减多少天;日期减去日期表示相隔多少天;日期不能相加 SELECT DATE'2019-08-30'+6, DATE'2019-08-30'-6, DATE'2019-08-30'-DATE'2019-08-16' ---- DATE'2019-08-30'+DATE'2019-08-16' 不允许日期+日期 FROM DUAL; 发布于 05-30 ...

June 23, 2020 · 1 min · jiezi

SQL-常用函数第六集-其余判断函数

看完这章你会学会以下内容: NVL和NVL2语法和常用实例DECODE 和 CASE WHEN 的区别1.NVL函数的格式如下:NVL(expr1,expr2) 含义:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。 SELECT NVL(NULL,0), -- 空转0 NVL(NULL,100), -- 空转100 NVL('', 99), -- 空字符转99 NVL(10, 100), -- 非空不会转 NVL('AD',77) -- 非空不会转 FROM DUAL; 2.NVL2函数的格式如下:NVL2(expr1,expr2, expr3) 含义:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。 SELECT NVL2(NULL, 0, 1), -- 空转1 NVL2('', 99, 2), -- 空字符转2 NVL2(10, 3, 100), -- 非空转3 NVL2('AD', 'AD', 7) -- 非空转'AD' FROM DUAL; 3.应用实例:查看员工信息和其年薪(薪酬+奖金) SELECT E.*,(SAL + NVL(COMM,0))*12 AS 年薪 FROM EMP E 4.应用实例二:对EMP表中的奖金为空的转换为100,不为空的转换为NULL; ...

June 23, 2020 · 2 min · jiezi

SQL-常用函数第四集-数字函数

看完本章你会学习到以下 数字函数有那些Round和TRUNC之间的区别SELECT ABS(-2) FROM DUAL; -- 2SELECT ROUND(2.281,1) FROM DUAL; -- 2.3SELECT MOD(10,3) FROM DUAL; --- 1SELECT POWER(2,3) AS 平方,POWER(2,-1) AS 求导 FROM DUAL;SELECT TRUNC(4.1231,2) FROM DUAL; ---- 截取小数点后几位,不参与四舍五入 4.12SELECT ABS(-2)AS 绝对值 ,ROUND(2.281,1)AS 四舍五入 ,MOD(10,3 )AS 求余 ,POWER(2,3) AS 平方,POWER(2,-1) AS 求导 ,TRUNC(4.1231,2) AS 不四舍五入取整 FROM DUAL;

June 23, 2020 · 1 min · jiezi

SQL常用函数-第二集-转换函数

看完这章你会学到以下内容 转换函数有那几种,通常用得最多的是那个?为什么要用转换函数?各自转换的关系,适用条件是什么?*数据类型有三类:数字,字符,日期 对应就用转换它们三种类型的函数 :转换函数! To_Date 转日期 Date 强制转换,里面一定要有'-'才能转换,数字只会出现错误,例如: SELECT DATE'2019-01-01' FROM DUAL; --- 强制转换为日期格式 SELECT TO_DATE('2019-01-01','YYYY/MM/DD') FROM DUAL; SELECT TO_DATE('2019-01-01','YYYY-MM-DD') FROM DUAL; SELECT TO_DATE('2019-01-01','YYYYMMDD') FROM DUAL; ---- 错误, 日期转换只有以上两种形式 注意:字符或数字中的年月日必须是日期范围内的值 SELECT TO_DATE('2019-13-08','YYYY-MM-DD'), -- 月份不对 TO_DATE(20190732,'YYYY-MM-DD') -- 天数不对 FROM DUAL; -- 字符日期中有-或/转化为日期类型必须加-或/ SELECT TO_DATE('2019-07-08','YYYYMMDD'), -- 错误 TO_DATE(20190708,'YYYY-MM-DD') FROM DUAL; --- 成功 To_Char() 转换为字符 SELECT TRUNC(TO_DATE(SYSDATE),'Y') FROM DUAL; SELECT TO_CHAR(DATE'2019-08-30','YYYY'), -- '2019' TO_CHAR(DATE'2019-08-30','YYYYMM'), -- '201908' TO_CHAR(DATE'2019-08-30','WW'), -- '35' 第35周 TO_CHAR(DATE'2019-08-30','IW'), -- '35' 第35周(自然周) TO_CHAR(DATE'2019-08-30','Q'), -- '3' 第3季度 TO_CHAR(DATE'2019-08-30','MM'), -- '08' TO_CHAR(DATE'2019-08-30','DD'), -- '30' TO_CHAR(DATE'2019-08-30','D') -- '6' 当周的第几天(星期天为第一天) FROM DUAL; ...

June 23, 2020 · 1 min · jiezi

oracle运维07查看锁资源情况

1.查看锁表情况;SELECT /*+ RULE */ Ls.Osuser Os_User_Name, Ls.Username User_Name, Decode(Ls.TYPE, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') Lock_Type, o.Object_Name OBJECT, Decode(Ls.Lmode, 1, NULL, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', NULL) Lock_Mode, o.Owner, Ls.Sid, Ls.Serial# Serial_Num, Ls.Id1, Ls.Id2 FROM Sys.Dba_Objects o, (SELECT s.Osuser, s.Username, l.TYPE, l.Lmode, s.Sid, s.Serial#, l.Id1, l.Id2 FROM V$session s, V$lock l WHERE s.Sid = l.Sid) Ls WHERE o.Object_Id = Ls.Id1 AND o.Owner <> 'SYS' ORDER BY o.Owner, o.Object_Name;2.查看锁表、主机、SID/SERIALselect l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user_name, s.machine, s.terminal, o.object_name, s.logon_time, 'alter system kill session '''||l.session_id||','||s.serial#||''';' kill会话 from v$locked_object l, all_objects o, v$session swhere l.object_id = o.object_id and l.session_id = s.sid order by sid, s.serial#;3.查看导至锁表的sql语句(汇总查询);select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.SQL_FULLTEXT, o.object_name from v$sqlarea a, v$session s, v$locked_object l,all_objects owhere l.object_id = o.object_id and l.session_id = s.sid and s.prev_sql_addr = a.addressorder by sid, s.serial#;4.sid查看sql语句;select b.sql_text from v$session a, v$sql bwhere a.sid = SID号 --session_id and a.SQL_ADDRESS = b.ADDRESS(+);5.删除锁表的会话;----3028:SID,15898:SERIAL#alter system kill session '3028,15898';

June 22, 2020 · 1 min · jiezi

oracle运维05监视执行sql正在执行已执行执行性能查看

1.正在执行的sqlselect a.username, a.sid,b.SQL_TEXT,b.SQL_FULLTEXT,b.sql_id,b.EXECUTIONS from v$session a, v$sqlarea b where a.sql_address = b.address2.执行过的sqlselect b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXTfrom v$sqlarea bwhere b.FIRST_LOAD_TIME between '2020-06-20/01:52:00' and '2020-06-22/13:52:02'order by b.FIRST_LOAD_TIME desc;3.查找前10条性能最差sql;SELECT * FROM (select PARSING_USER_ID, EXECUTIONS, SORTS, COMMAND_TYPE, DISK_READS, sql_text, sql_fulltext, parsing_schema_name FROM v$sqlarea order BY disk_reads DESC) where ROWNUM < 10;

June 22, 2020 · 1 min · jiezi

oracle运维查询占用物理读资源性能

1.查询占用物理读资源性能分析select sql_text,sql_id, disk_reads, buffer_gets, parsing_schema_name, executionsfrom v$sqlarea where parsing_schema_name='用户对象'order by disk_reads desc;

June 20, 2020 · 1 min · jiezi

实用Oracle数据库常用命令整理

这篇文章主要介绍了oracle查询语句,有助于新手迅速熟悉ORACLE基本语法有助于新手迅速熟悉ORACLE基本语法,需要的朋友可以收藏下 oracle查看用户状态 select username,account_status from dba_users;查看所有角色 select * from dba_roles;锁定用户 alter user XXX account lock;Linux下新建用户 useradd -d /home/XXX -s /usr/bin/ksh -m XXX passwd XXX用户创建 useradd -d /home/XXX -g users -s /bin/bash -m XXX -G users  passwd XXX删除用户 userdel -r XXXLinux查看进程 ps -e|grep *** kill -9 ***(PID)linux查看版本信息 lsb_release -a赋予debug权限给用户 grant debug any procedure, debug connect session to prodb;oracle查询用户 select username,password from dba_users;oracle删除用户 drop user XXX cascade;如果遇到报错 oracle cannot drop a user that is currently connected 则执行以下命令 以sysdba登陆 shutdown immediate; startup restrict; drop user *** cascade; alter system disable restricted session;Oracle监听 lsnrctl start即可启动 如果出现以sysdba用户连接无法连接到数据库的现象  检查环境变量ORACLE_HOME,ORACLE_SID sqlplus下的删除符号 ctrl+backspacesqlplus远程连接 sqlplus 用户名/密码@10.10.10.10:1521/orcl查询表空间和对应数据文件的关系 select t1.name, t2.name  from v$tablespace t1, v$datafile t2 where  t1.ts# = t2.ts#;删除表空间 drop tablespace **** including contents and datafiles;取数据重复插入表 insert into table_A(X,X,X,X) select X,X,X,X from table_B where XXXtable_A和table_B可以是一张表,数据当然要经过更新之后再插入 为用户赋debug权限 GRANT debug any procedure, debug connect session TO USER XXX;查看不同用户的连接数 select username,count(username) from v$session where username is not null group by username;查看执行日志 select t."SQL_TEXT",t."SQL_FULLTEXT",t."LAST_ACTIVE_TIME" from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('XXX') and t."SQL_TEXT" like '%XXX%'收集整理于网络如有错误或其它问题,欢迎小伙伴留言评论、指正。如有帮助,欢迎点赞+转发分享。 欢迎大家关注民工哥的公众号:民工哥技术之路

June 16, 2020 · 1 min · jiezi

Oracle中使用decode优雅的行转列

Oracle中使用decode优雅的行转列最近笔者在工作中终于还是碰到了行转列的应用场景,做一下笔记供自己查看和帮助有需求的人。 在其他关系数据库中,大多推荐用case when then end这种臃肿复杂的写法,最近看到oracle数据库中独有的函数decode十分优雅,下面简单介绍一下。 decode函数定义:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 在代码中可以理解为: if 条件==值1: 返回值1elif 条件==值2: 返回值2elif 条件==值n: 返回值nelse: 缺省值在关系数据库中可以理解为: case 条件 when 值1 then 返回值1 when 值2 then 返回值2 when 值n then 返回值n else 缺省值 end as 列示例:TYPENAMECLASSNUM_FLAG水果香蕉出售50水果香蕉剩余23水果香蕉单价7宠物小猫出售3宠物小猫剩余5SQL语句: SELECT TYPE,NAME, SUM(DECODE(CLASS,'出售',NUM_FLAG,0)) AS 出售, SUM(DECODE(CLASS,'剩余',NUM_FLAG,0)) AS 剩余, SUM(DECODE(CLASS,'单价',NUM_FLAG,0)) AS 单价FROM TEMP_TABLE GROUP BY TYPE,NAME执行后效果 TYPENAME出售剩余单价水果香蕉50237宠物小猫350

June 5, 2020 · 1 min · jiezi