@lijiahong
2018-10-19T14:24:53.000000Z
字数 8029
阅读 435
smartbi sqlplus oracle
sys;--系统管理员,拥有最高权限system;--本地管理员,次高权限scott;--普通用户,密码默认为tiger,默认未解锁
sqlplus / as sysdba;--登陆sys帐户sqlplus sys as sysdba;--同上sqlplus scott/tiger;--登陆普通用户scott
create user zhangsan;--在管理员帐户下,创建用户zhangsanalert user scott identified by tiger;--修改密码
1、默认的普通用户scott默认未解锁,不能进行使用,新建的用户也没有任何权限,必须授予权限
grant create session to zhangsan;--授予zhangsan用户创建session的权限,即登陆权限grant unlimited tablespace to zhangsan;--授予zhangsan用户使用表空间的权限grant create table to zhangsan;--授予创建表的权限grante drop table to zhangsan;--授予删除表的权限grant insert table to zhangsan;--插入表的权限grant update table to zhangsan;--修改表的权限grant all to public;--这条比较重要,授予所有权限(all)给所有用户(public)
2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权
grant select on tablename to zhangsan;--授予zhangsan用户查看指定表的权限grant drop on tablename to zhangsan;--授予删除表的权限grant insert on tablename to zhangsan;--授予插入的权限grant update on tablename to zhangsan;--授予修改表的权限grant insert(id) on tablename to zhangsan;grant update(id) on tablename to zhangsan;--授予对指定表特定字段的插入和修改权限,注意,只能是insert和updategrant alert all table to zhangsan;--授予zhangsan用户alert任意表的权限
基本语法同grant,关键字为revoke
select * from user_sys_privs;--查看当前用户所有权限select * from user_tab_privs;--查看所用用户对表的权限
select * from zhangsan.tablename
即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:grant alert table on tablename to zhangsan with admin option;--关键字 with admin optiongrant alert table on tablename to zhangsan with grant option;--关键字 with grant option效果和admin类似
角色即权限的集合,可以把一个角色授予给用户
create role myrole;--创建角色grant create session to myrole;--将创建session的权限授予myrolegrant myrole to zhangsan;--授予zhangsan用户myrole的角色----------drop role myrole;删除角色
sqlplus /nologconn / as sysdba;create user YM identified by ym123456;grant dba to username;conn username/passwordselect * from user_sys_privs;
1、进入sqlplus模式
sqlplus / as sysdba;
2、查看用户密码的有效期设置(一般默认的配置文件是DEFAULT)
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3、将密码有效期由默认的180天修改成“无限制”,修改之后不需要重启动数据库,会立即生效
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;
4、帐户再改一次密码
alter user YM identified by ym123456;alter user JXKH identified by jxkh123456;
5、使用修改后的用户登录,如果报“ORA-28000:用户已被锁”,解锁
alter user db_user account unlock;commit;
create tablespace user_datadatafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'size 50mautoextend on 自动增长开next 50m maxsize 20480m 增长文件大小和最大extent management local; 区间 本地管理
create user username identified by passworddefault tablespace user_datatemporary tablespace user_temp;
create table +表名称 (+字段名 字段类型 是否为空 是否主键)
truncate table jx_jsjgb
alter table +表名称 add 字段名 字段类型 --表增加列alter table +表名称 modify 字段名 字段类型 --表修改alter table +表名称 drop 字段名 --表删除
toprownumlimit
oracle
to_char --转换成字符to_date --转换成日期add_months --取月份函数to_number --转换成数字
mysql
date_format(date,'%Y-%m-%d') --oracle中的to_char();str_to_date(date,'%Y-%m-%d') --oracle中的to_date();%Y:代表4位的年份%y:代表2为的年份%m:代表月, 格式为(01……12)%c:代表月, 格式为(1……12)%d:代表月份中的天数,格式为(00……31)%e:代表月份中的天数, 格式为(0……31)%H:代表小时,格式为(00……23)%k:代表 小时,格式为(0……23)%h: 代表小时,格式为(01……12)%I: 代表小时,格式为(01……12)%l :代表小时,格式为(1……12)%i: 代表分钟, 格式为(00……59)%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)%T:代表 时间,格式为24 小时(hh:mm:ss)
oracle
extract(year from sysdate) --提取当前年extract(month from sysdate) --提取当前月份extract(day from sysdate) --提取当天
mysql
now() --当前日期WEEK(now(),3) --当前第几周
sqlserver
getdate()
substr(字段,1,4) --数字可以自己写
'-'||'-'|| '-' --输出--- ||为连接符 //oracle
select CONCAT('My', 'S', 'QL'); //mysql

select t.deptno,t.sal,sum(t.sal) over (order by t.deptno) AccuSalfrom emp t
查询结果如下:

select name,dbid from v$database;或者show parameter db_name;
select instance_name from v$instance;或者show parameter instance_name;
select value from v$parameter where name='db_domain';或者show parameter domain;
select value from v$parameter where name='service_name';或者show parameter service;或者show parameter names;
此参数是数据库标识类参数,用service_name表示。数据库如果有域,则数据库服务名就是全局数据库名;如果没有,则数据库服务名就是数据库名。
查询:
show parameter service_name;
语法:
ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的每条xlh记录返回一个序号。
示例:
xlh row_num1700 11500 21085 3710 4
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
实例:
empid deptid salary----------- ----------- ---------------------------------------1 10 5500.002 10 4500.003 20 1900.004 20 4800.005 40 6500.006 40 14500.007 40 44500.008 50 6500.009 50 7500.00
需求:根据部门分组,显示每个部门的工资等级
预期结果:
empid deptid salary rank----------- ----------- --------------------------------------- --------------------1 10 5500.00 12 10 4500.00 24 20 4800.00 13 20 1900.00 27 40 44500.00 16 40 14500.00 25 40 6500.00 39 50 7500.00 18 50 6500.00 2
SQL脚本:
SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee
(description=(address_list=(address=(host=localhost)(protocol=tcp)(port=1521))(address=(host=localhost)(protocol=tcp)(port=1521))(load_balance=yes)(failover=yes))(connect_data=(service_name=ym)))
三种内存溢出异常介绍
1. OutOfMemoryError: Java heap space 堆溢出
内存溢出主要存在问题就是出现在这个情况中。当在JVM中如果98%的时间是用于GC且可用的Heap size不足2%的时候将抛出此异常信息。
2. OutOfMemoryError: PermGen space 非堆溢出(永久保存区域溢出)
这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEBAPP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。如果webapp用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
3. OutOfMemoryError: unable to create new native thread. 无法创建新的线程
这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。
JVM内存分配设置的参数有四个
-Xmx Java Heap最大值,默认值为物理内存的1/4;-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;-Xmn Java Heap Young区大小,不熟悉最好保留默认值;-Xss 每个线程的Stack大小,不熟悉最好保留默认值;-XX:PermSize:设定内存的永久保存区域;-XX:MaxPermSize:设定最大内存的永久保存区域;-XX:PermSize:设定内存的永久保存区域;-XX:NewSize:设置JVM堆的‘新生代’的默认大小;-XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;
OutOfMemoryError: PermGen space
修改catalina.bat
set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m //主要设置MaxPermSize,一般256足够
UPDATE T_user set C_USERPWD='021232f297a57a5a743894a0e4a801fc3' where C_userid='ADMIN';--重置admin密码为admin;
selectcount ( 书籍名称 ) as 借书总量,substr(to_char(借阅日期,'yyyy-mm-dd'),1,4) as 借阅日期from图书借阅信息where借阅日期 between add_months(sysdate,-60) and sysdategroup bysubstr(to_char(借阅日期,'yyyy-mm-dd'),1,4)
select学号 ,姓名 ,专业代码 as 专业代码1,专业代码 as 专业代码2,专业名称, 学类代码 as 学类代码1 ,代码 as 学类代码2, 名称from专业代码 ,学生基本信息,学生学历层次表where专业代码 = 专业代码 and 代码 = 学类代码
select count(职工号) as 总人数, (case 性别代码 when '1' then '男' else '女' end ) as 性别 from 教职工数据 where 性别代码 is not null group by 性别代码;
REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)') //全模糊匹配REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)$') //左模糊匹配REGEXP_LIKE(字段名, '^(匹配串1|匹配串2|...)') //右模糊匹配
ASCII字符串==>16进制串
create or replace function AscToHex(sIn IN varchar2)RETURN varchar2ISsTmp varchar2(4000);i integer;BEGINi:=1;stmp:='';for i in 1..length(sIn) loopsTmp:=sTmp||trim(to_char(ascii(substr(sIn,i,1)),'XXXX'));end loop;return sTmp;END;/
16进制串==>ASCII字符串
要区分字符集,以中文字符为例,对于数据库字符集是中文,要保证能够正确转回来,要有所不同。
数据库字符集是中文
create or replace function HexToAsc(sIn IN varchar2)RETURN varchar2ISsTmp varchar2(4000);i integer;x integer;BEGINi:=1;stmp:='';loopexit when i>length(sIn);x:=to_number(substr(sIn,i,2),'XXXX');if x>128 thensTmp:=sTmp||chr(to_number(substr(sIn,i,4),'XXXX'));i:=i+4;elsesTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));i:=i+2;end if;end loop;return sTmp;END;/
数据库字符集是英文
create or replace function HexToAsc(sIn IN varchar2)RETURN varchar2ISsTmp varchar2(4000);i integer;BEGINi:=1;stmp:='';loopexit when i>length(sIn);sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));i:=i+2;end loop;return sTmp;END;/
测试,如下:
SQL>select hextoasc(asctohex('你好ABC么')) from dual;HEXTOASC(ASCTOHEX('你好ABC么'))--------------------------------------------------------------------------------你好ABC么
CREATEOR REPLACE FUNCTION MD5 ( passwd IN VARCHAR2 ) RETURN VARCHAR2 IS retval VARCHAR2 ( 32 );BEGINretval := utl_raw.cast_to_raw (DBMS_OBFUSCATION_TOOLKIT.MD5 ( INPUT_STRING => passwd ));RETURN retval;END;
小写转大写UPPer
select upper(ename) from emp;
大写转小写LOWER
select lower(ename) from emp;
selecta.COl1,b.Col2from(select Col1,COl2=convert(xml,' <root> <v>'+replace(COl2,',',' </v> <v>')+' </v> </root>') from Tab)aouter apply(select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b
打开某文档之后,点击报表宏
以此位置为例,点击跳转到另一个报表;
右击跳转规则向导,新建向导;
填写名称等
结果单元格填写要跳转链接的表格坐标。
点击下一步,选择要链接到的表格;可选项新窗口打开
点击保存即可