[关闭]
@lijiahong 2018-10-19T14:24:53.000000Z 字数 8029 阅读 435

smartbi 日志 out

smartbi sqlplus oracle


oracle 语句

用户创建、权限

完整步骤点我

一、创建

  1. sys;--系统管理员,拥有最高权限
  2. system;--本地管理员,次高权限
  3. scott;--普通用户,密码默认为tiger,默认未解锁

二、登陆

  1. sqlplus / as sysdba;--登陆sys帐户
  2. sqlplus sys as sysdba;--同上
  3. sqlplus scott/tiger;--登陆普通用户scott

三、管理用户

  1. create user zhangsan;--在管理员帐户下,创建用户zhangsan
  2. alert user scott identified by tiger;--修改密码

四,授予权限

1、默认的普通用户scott默认未解锁,不能进行使用,新建的用户也没有任何权限,必须授予权限

  1. grant create session to zhangsan;--授予zhangsan用户创建session的权限,即登陆权限
  2. grant unlimited tablespace to zhangsan;--授予zhangsan用户使用表空间的权限
  3. grant create table to zhangsan;--授予创建表的权限
  4. grante drop table to zhangsan;--授予删除表的权限
  5. grant insert table to zhangsan;--插入表的权限
  6. grant update table to zhangsan;--修改表的权限
  7. grant all to public;--这条比较重要,授予所有权限(all)给所有用户(public)

2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权

  1. grant select on tablename to zhangsan;--授予zhangsan用户查看指定表的权限
  2. grant drop on tablename to zhangsan;--授予删除表的权限
  3. grant insert on tablename to zhangsan;--授予插入的权限
  4. grant update on tablename to zhangsan;--授予修改表的权限
  5. grant insert(id) on tablename to zhangsan;
  6. grant update(id) on tablename to zhangsan;--授予对指定表特定字段的插入和修改权限,注意,只能是insertupdate
  7. grant alert all table to zhangsan;--授予zhangsan用户alert任意表的权限

五、撤销权限

  1. 基本语法同grant,关键字为revoke

六、查看权限

  1. select * from user_sys_privs;--查看当前用户所有权限
  2. select * from user_tab_privs;--查看所用用户对表的权限

七、操作表的用户的表

  1. select * from zhangsan.tablename

八、权限传递

  1. 即用户A将权限授予BB可以将操作的权限再授予C,命令如下:
  2. grant alert table on tablename to zhangsan with admin option;--关键字 with admin option
  3. grant alert table on tablename to zhangsan with grant option;--关键字 with grant option效果和admin类似

九、角色

角色即权限的集合,可以把一个角色授予给用户

  1. create role myrole;--创建角色
  2. grant create session to myrole;--将创建session的权限授予myrole
  3. grant myrole to zhangsan;--授予zhangsan用户myrole的角色
  4. ----------
  5. drop role myrole;删除角色

创建用户并授予dba权限(完整步骤)

  1. sqlplus /nolog
  2. conn / as sysdba;
  3. create user YM identified by ym123456;
  4. grant dba to username;
  5. conn username/password
  6. select * from user_sys_privs;

用户过期设置方法

1、进入sqlplus模式

  1. sqlplus / as sysdba;

2、查看用户密码的有效期设置(一般默认的配置文件是DEFAULT)

  1. SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

3、将密码有效期由默认的180天修改成“无限制”,修改之后不需要重启动数据库,会立即生效

  1. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;

4、帐户再改一次密码

  1. alter user YM identified by ym123456;
  2. alter user JXKH identified by jxkh123456;

5、使用修改后的用户登录,如果报“ORA-28000:用户已被锁”,解锁

  1. alter user db_user account unlock;
  2. commit;

创建表空间

  1. create tablespace user_data
  2. datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
  3. size 50m
  4. autoextend on 自动增长开
  5. next 50m maxsize 20480m 增长文件大小和最大
  6. extent management local; 区间 本地管理

授予表空间

  1. create user username identified by password
  2. default tablespace user_data
  3. temporary tablespace user_temp;

创建表

  1. create table +表名称 (
  2. +字段名 字段类型 是否为空 是否主键
  3. )

删除表数据

  1. truncate table jx_jsjgb
  1. alter table +表名称 add 字段名 字段类型 --表增加列
  2. alter table +表名称 modify 字段名 字段类型 --表修改
  3. alter table +表名称 drop 字段名 --表删除

输出前几位

  1. top
  2. rownum
  3. limit

转换函数

oracle

  1. to_char --转换成字符
  2. to_date --转换成日期
  3. add_months --取月份函数
  4. to_number --转换成数字

mysql

  1. date_format(date,'%Y-%m-%d') --oracle中的to_char();
  2. str_to_date(date,'%Y-%m-%d') --oracle中的to_date();
  3. %Y:代表4位的年份
  4. %y:代表2为的年份
  5. %m:代表月, 格式为(01……12)
  6. %c:代表月, 格式为(1……12)
  7. %d:代表月份中的天数,格式为(00……31)
  8. %e:代表月份中的天数, 格式为(0……31)
  9. %H:代表小时,格式为(00……23)
  10. %k:代表 小时,格式为(0……23)
  11. %h 代表小时,格式为(01……12)
  12. %I 代表小时,格式为(01……12)
  13. %l :代表小时,格式为(1……12)
  14. %i 代表分钟, 格式为(00……59)
  15. %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
  16. %T:代表 时间,格式为24 小时(hh:mm:ss)

取当前日期函数

oracle

  1. extract(year from sysdate) --提取当前年
  2. extract(month from sysdate) --提取当前月份
  3. extract(day from sysdate) --提取当天

mysql

  1. now() --当前日期
  2. WEEK(now(),3) --当前第几周

sqlserver

  1. getdate()

取值

  1. substr(字段,14) --数字可以自己写

  1. '-'||'-'|| '-' --输出--- ||为连接符 //oracle
  1. select CONCAT('My', 'S', 'QL'); //mysql

over()

image_1bvel3ibv1i8l12u9110u7qp1skm9.png-39.6kB

  1. select t.deptno,
  2. t.sal,
  3. sum(t.sal) over (order by t.deptno) AccuSal
  4. from emp t

查询结果如下:
image_1bvel41fpd0u1a8p1ks117301set16.png-51.6kB

oracle查询数据库名、实例名等

查询数据库名

  1. select name,dbid from v$database;或者show parameter db_name;

查询实例名

  1. select instance_name from v$instance;或者show parameter instance_name;

查询数据库域名

  1. select value from v$parameter where name='db_domain';或者show parameter domain;

查询数据库服务器

  1. select value from v$parameter where name='service_name';或者show parameter service;或者show parameter names;

数据库服务名

此参数是数据库标识类参数,用service_name表示。数据库如果有域,则数据库服务名就是全局数据库名;如果没有,则数据库服务名就是数据库名。
查询:

  1. show parameter service_name;

SQL ROW_NUMBER() OVER函数的基本用法用法

语法:

  1. ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说row_number()1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的每条xlh记录返回一个序号。
示例:

  1. xlh row_num
  2. 1700 1
  3. 1500 2
  4. 1085 3
  5. 710 4
  1. row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

实例:

  1. empid deptid salary
  2. ----------- ----------- ---------------------------------------
  3. 1 10 5500.00
  4. 2 10 4500.00
  5. 3 20 1900.00
  6. 4 20 4800.00
  7. 5 40 6500.00
  8. 6 40 14500.00
  9. 7 40 44500.00
  10. 8 50 6500.00
  11. 9 50 7500.00

需求:根据部门分组,显示每个部门的工资等级

预期结果:

  1. empid deptid salary rank
  2. ----------- ----------- --------------------------------------- --------------------
  3. 1 10 5500.00 1
  4. 2 10 4500.00 2
  5. 4 20 4800.00 1
  6. 3 20 1900.00 2
  7. 7 40 44500.00 1
  8. 6 40 14500.00 2
  9. 5 40 6500.00 3
  10. 9 50 7500.00 1
  11. 8 50 6500.00 2

SQL脚本:

  1. SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

smartbi 配置连接

  1. (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)))

tomcat常见的内存溢出

三种内存溢出异常介绍
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内存分配设置的参数有四个

  1. -Xmx Java Heap最大值,默认值为物理内存的1/4
  2. -Xms Java Heap初始值,ServerJVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
  3. -Xmn Java Heap Young区大小,不熟悉最好保留默认值;
  4. -Xss 每个线程的Stack大小,不熟悉最好保留默认值;
  5. -XX:PermSize:设定内存的永久保存区域;
  6. -XX:MaxPermSize:设定最大内存的永久保存区域;
  7. -XX:PermSize:设定内存的永久保存区域;
  8. -XX:NewSize:设置JVM堆的‘新生代’的默认大小;
  9. -XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;

tomcat修改使用内存解决溢出问题

OutOfMemoryError: PermGen space

修改catalina.bat

  1. set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m //主要设置MaxPermSize,一般256足够

smartbi 语句备份

重置smartbi平台admin密码为admin;

  1. UPDATE T_user set C_USERPWD='021232f297a57a5a743894a0e4a801fc3' where C_userid='ADMIN';--重置admin密码为admin;

图书馆系列

查询五年内的图书借阅总量

  1. select
  2. count ( 书籍名称 ) as 借书总量,
  3. substr(to_char(借阅日期,
  4. 'yyyy-mm-dd'),1,4) as 借阅日期
  5. from
  6. 图书借阅信息
  7. where
  8. 借阅日期 between add_months(sysdate,-60) and sysdate
  9. group by
  10. substr(to_char(借阅日期,
  11. 'yyyy-mm-dd'),1,4)

学生管理系列

系别查询

  1. select
  2. 学号 ,
  3. 姓名 ,
  4. 专业代码 as 专业代码1,
  5. 专业代码 as 专业代码2,专业名称, 学类代码 as 学类代码1 ,代码 as 学类代码2, 名称
  6. from
  7. 专业代码 ,
  8. 学生基本信息,
  9. 学生学历层次表
  10. where
  11. 专业代码 = 专业代码 and 代码 = 学类代码

性别代码转换男女

  1. select count(职工号) as 总人数, (case 性别代码 when '1' then '男' else '女' end ) as 性别 from 教职工数据 where 性别代码 is not null group by 性别代码;

多个like嵌套

  1. REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)') //全模糊匹配
  2. REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)$') //左模糊匹配
  3. REGEXP_LIKE(字段名, '^(匹配串1|匹配串2|...)') //右模糊匹配

16进制转换函数

ASCII字符串==>16进制串

  1. create or replace function AscToHex(sIn IN varchar2)
  2. RETURN varchar2
  3. IS
  4. sTmp varchar2(4000);
  5. i integer;
  6. BEGIN
  7. i:=1;
  8. stmp:='';
  9. for i in 1..length(sIn) loop
  10. sTmp:=sTmp||trim(to_char(ascii(substr(sIn,i,1)),'XXXX'));
  11. end loop;
  12. return sTmp;
  13. END;
  14. /

16进制串==>ASCII字符串
要区分字符集,以中文字符为例,对于数据库字符集是中文,要保证能够正确转回来,要有所不同。
数据库字符集是中文

  1. create or replace function HexToAsc(sIn IN varchar2)
  2. RETURN varchar2
  3. IS
  4. sTmp varchar2(4000);
  5. i integer;
  6. x integer;
  7. BEGIN
  8. i:=1;
  9. stmp:='';
  10. loop
  11. exit when i>length(sIn);
  12. x:=to_number(substr(sIn,i,2),'XXXX');
  13. if x>128 then
  14. sTmp:=sTmp||chr(to_number(substr(sIn,i,4),'XXXX'));
  15. i:=i+4;
  16. else
  17. sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));
  18. i:=i+2;
  19. end if;
  20. end loop;
  21. return sTmp;
  22. END;
  23. /

数据库字符集是英文

  1. create or replace function HexToAsc(sIn IN varchar2)
  2. RETURN varchar2
  3. IS
  4. sTmp varchar2(4000);
  5. i integer;
  6. BEGIN
  7. i:=1;
  8. stmp:='';
  9. loop
  10. exit when i>length(sIn);
  11. sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));
  12. i:=i+2;
  13. end loop;
  14. return sTmp;
  15. END;
  16. /

测试,如下:

  1. SQL>select hextoasc(asctohex('你好ABC么')) from dual;
  2. HEXTOASC(ASCTOHEX('你好ABC么'))
  3. --------------------------------------------------------------------------------
  4. 你好ABC

MD5函数加密

  1. CREATE
  2. OR REPLACE FUNCTION MD5 ( passwd IN VARCHAR2 ) RETURN VARCHAR2 IS retval VARCHAR2 ( 32 );
  3. BEGIN
  4. retval := utl_raw.cast_to_raw (
  5. DBMS_OBFUSCATION_TOOLKIT.MD5 ( INPUT_STRING => passwd ));
  6. RETURN retval;
  7. END;

Oracle 大小写转换函数

小写转大写UPPer

  1. select upper(ename) from emp;

大写转小写LOWER

  1. select lower(ename) from emp;

sqlserver逗号分隔

  1. select
  2. a.COl1,b.Col2
  3. from
  4. (select Col1,COl2=convert(xml,' <root> <v>'+replace(COl2,',',' </v> <v>')+' </v> </root>') from Tab)a
  5. outer apply
  6. (select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b

表下钻步骤

打开某文档之后,点击报表宏
image_1budbgi4b1p5e7l21d45fg170o9.png-30.7kB
以此位置为例,点击跳转到另一个报表;
image_1budbi29k1aqkrb1q8s6b63fmm.png-21.9kB
右击跳转规则向导,新建向导;
image_1budbjf8q7bfdlk1uvqmv1pvr13.png-22.5kB
填写名称等
image.png-107.8kB
结果单元格填写要跳转链接的表格坐标。
image_1budbrpr514gs19ofk8i1rth1g694a.png-69.2kB
点击下一步,选择要链接到的表格;可选项新窗口打开
image_1budbvc9c2rfqqc1pec1qcp1er34n.png-105.9kB
点击保存即可

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注