低头拉车固然很重要,大家抬头看路也很重要。
测试时应注意的一些点
1.在测试系统时,应用不同的真实的医生账号进行测试,主任 副主任 医师 因为各自的权限不太相同。
例如一些处方(如毒麻)一些医生是不能开的,虽然有弹窗提示,但是会不会出现点击了确认的按钮后仍能继续提交处方。
2.候诊病人与回诊病人在显示屏应如何排列?回诊病人的排队顺序又应如何?直接优先?
3.对比旧系统来进行测试新系统,用同一账号来登录新旧系统。如在旧系统建档时所需填的必填信息与新系统的是否有缺失
学到的一些知识点
1.“双通道”是指通过定点医疗机构和定点零售药店两个渠道。
2.oracle闪回语法 flashback
是Oracle提供的能使数据库整体或局部回到“过去”的闪回功能的总称,主要用于对抗人为错误。
查询病人ID为 '000478290700' 在2023-5-19 14:50:00的处方明细表
select * from mz_detail as of timestamp timestamp'2023-5-19 14:50:00'
where p_id = '000478290700' and times = 58
查询hr.employees在2011-10-10 06:40:37时所有的行:
select * from hr.employees as of timestamp to_timestamp('2011-10-10 06:40:37','YYYY-MM-DD HH24:MI:SS');
3.--查看闪回默认分钟command windows窗口执行
show parameter undo_retention
4.--表空间占用oracle
select segment_name,sum(bytes)/1024/1024 as "size(M)" from dba_segments
where owner='HISDB'
and segment_type='TABLE'
group by segment_name
order by sum(bytes) desc
select a.TABLE_NAME,a.COLUMN_NAME,b.segment_name,round(b.BYTES/1024/1024) as "size(M)" from dba_lobs a,dba_segments b
where a.segment_name=b.segment_name
and a.owner='HISDB'
order by round(b.BYTES/1024/1024) desc
5.查询表被哪些存储使用过
select distinct object_name(id) from syscomments where id in
(select object_id from sys.objects where type='P') and text like'%tablename%'
6.--事务死锁
--oracle
select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name, ao.object_name
from v$locked_object lo,dba_objects ao,v$session sess
where ao.object_id=lo.object_id and lo.session_id=sess.sid;
--alter system kill SESSION '2601,27909' 结束线程
--sql server
select
'事务中', getdate() as now, * from master.dbo.sysprocesses a(nolock)
where open_tran>0
--kill sid
select 'kill',spid from master.dbo.sysprocesses a(nolock)
where open_tran>0 and status='sleeping'
select b."SQL_TEXT", a.* from v$session_longops a ,v$sql b where a.sql_id = b.sql_id(+)order by a.start_time
7.sql优化
1.建议少用‘*’代替所有列
2.用exists代替in
3.连表查询的时候尽量减少表的查询次数
4.用truncate代替delete(删除全表数据)
5.合理使用索引(详见索引)
6.sql语句尽量大写,Oracle会把所有语句转换成大写在执行
7.在保证语句完整的情况下,多使用commit(多用于begin…end中)
8.优化group by,将不需要的数据尽量在group by之前过滤掉,避免使用having
9.连表查询是尽量使用表的别名,减少解析时间
10.表连接在where之前,where条件能够过滤更多数据的条件放在最开始
8.条件执行顺序
1. mysql,其条件执行顺序从左往右,自上而下
2. oracle,其条件执行顺序从右往左,自下而上
9.门诊的业务流程图
PS:刚开始接触时不要觉得简单就不上心,操作系统起来是简单,但是要将流程熟记于心,背下来才属于自己的。
10.表空间收缩
--delete from ebill where createtime<to_date('2021-07-27','yyyy-mm-dd')
alter table ebill enable row movement;--打开行移动
alter table ebill shrink space cascade;--压缩表及相关数据段,并下调HWM
alter table ebill disable row movement;--关闭行移动
11.oracle 链接库语句
create database link dblk_hzsyreal
connect to hisdb identified by hqmz68001hzsy
using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 地址)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = syhqdb)))'
12.oracle高耗时语句统计
select b.sql_text, b.sql_id, c.username, c.client_info, c.module, a.*
from gv$session_longops a
left join gv$sql b on a.sql_id = b.sql_id and a.inst_id = b.inst_id
left join gv$session c on a.sid = c.sid and a.inst_id = c.inst_id
order by a.start_time
13.
select * from wj_charge_item where name like '%呼吸%'
不走索引Like语句优化改写
select * from wj_charge_item where charindex('呼吸',name)>0
revers
or 优化改写
union all
charindex是SQL函数,一个字符串函数,它返回子字符串在字符串中的位置,具有可选的搜索起点。
CHARINDEX(substring,string[,start])
参数
substring - 要在字符串中匹配的子字符串。
string - 作为子字符串搜索目标的字符串表达式。
start - 可选-子字符串搜索的起始点,指定为正整数。
从字符串开始的字符计数,从1开始计数。
若要从字符串的开头开始搜索,请忽略此参数或指定从0或1开始。
负数、空字符串、NULL或非数字值被视为0。
CHARINDEX返回INTEGER数据类型。
14.新增物价耗材流程
1先把报表对应数据库字段弄一致
2查看当前物价最大值是多少,并从最大值数目开始新增
3从备份数据库新建表(表结构和目标表一致)且和报表顺序一致)
4从SQL管理菜单中倒入数据到临时表中
5通过临时表关联几个字典表将几个中文定义修改为对应的CODE --dic_charge_group ,dic_audit_code,dic_bill_code_zy,
6执行脚本
7修改最大的条目数
15.P.O.口服