编辑
2023-09-04
学习记录
00

前提

由于业务需要,需要返回多个值,不能在程序里写死sql,所以就改成写函数,让现场可以自动配置

问题

oracle函数和存储过程返回结果集是一件很麻烦的事情,其次就是不能使用同一个字段名union,如果设置成返回复杂对象或者游标类型,那么就不够动态,前端还是要不断因为现场调整函数而进行调整,所以我采用拼接字符串的方式,返回一个字符串,然后java根据字符串来中',',来进行分割成数组返回给前端,这个方式只能在函数中每个select查询都是查询一个结果的时候才能用,如果查询多个结果就不好用了

实现

oracle 函数

sql
create or replace function get_important_mark(patientId in varchar2, visitNo in varchar2) RETURN VARCHAR2 IS result_marks VARCHAR2(100); -- 修改为result_marks变量,并指定适当的长度 mark1 VARCHAR2(10); mark2 VARCHAR2(10); BEGIN -- 第一个查询语句 SELECT CASE WHEN SYSDATE - t.admission_date_time > 3 THEN '三' ELSE '' END INTO mark1 FROM system.abc t WHERE t.patietn_id = patientId AND t.visit_id = visitNo; -- 将第一个标记赋值给result_marks变量 result_marks := mark1; -- 第二个查询语句(修改条件) SELECT CASE WHEN SYSDATE - t.discharge_date_time > 3 THEN '四' ELSE '' END INTO mark2 FROM system.abc t WHERE t.patient_id = patientId AND t.visit_id = visitNo; -- 将第二个标记添加到result_marks变量中(使用字符串连接操作符) result_marks := result_marks || ',' || mark2; -- 返回结果值 RETURN result_marks; END get_important_mark;
编辑
2023-07-25
学习记录
00

前提

需要前端传入语句,后端直接对语句进行执行操作,之前已经写过使用jdbc的方式执行,现在想用mabatis的方式执行

第一种mapper的方式

直接传入mapper接口层,使用@Select接口实现,或者传入mapper.xml中进行编写

java
public interface BaseMapper<T> extends com.baomidou.mybatisplus.core.mapper.BaseMapper<T> { @Select("${nativeSql}") Object nativeSql(@Param("nativeSql") String nativeSql); }

使用一个自己的BaseMapper去继承MybatisPlus自己的BaseMapper,然后所有的Mapper去继承自己写的BaseMapper即可,那么所有的Mapper都能查询原生SQL了。可能会导致异常

第二种使用SqlRunner

使用SqlRunner的方式执行原生SQL,也是MybatisPlus源码的测试类中用的最多的方法。 当前模块的application.yml文件中增加开启SqlRunner的开关

yml
mybatis-plus: global-config: enable-sql-runner: true

代码

java
int count = SqlRunner.db().selectCount(countSql);
编辑
2023-07-24
学习记录
00

前提

父级的orderNo属性修改后,需要同步更新多个子级的全部orderNo属性,子类的orderNo内容要和父级同步

实现

sql
MERGE INTO rec_search_solution_field e1 USING ( SELECT field_id, order_no FROM rec_search_solution_field WHERE solution_id='2023062616531652c6e468-8a73-4934-9f7d-7c96102c249a' AND order_no IS NOT NULL ) e2 ON (e1.field_id = e2.field_id) WHEN MATCHED THEN UPDATE SET e1.order_no = e2.order_no WHERE e1.solution_id= '2023071916160381771c2e-d2f1-4289-a022-83d2a71ceddd';
编辑
2023-07-24
遇到的问题
00

问题

两个视图中用到同一个表,然后两个视图之间有关联关系,查询效率非常低,like一个字段时,大概需要十几秒

原因

如果在两个视图中使用同一个表,并且这两个视图之间存在关联关系,那么在进行查询或更新操作时,可能会出现性能下降的情况。这主要是因为数据库需要在进行查询或更新操作时,对表进行大量的计算和索引操作,以维护数据的一致性和完整性。

具体来说,当一个视图中需要对表进行查询或更新操作时,数据库需要先查询出该表中的所有数据,并在内存中构建数据模型。然后,根据第一个视图中的条件,对数据模型进行筛选和排序,得到符合条件的数据。接着,根据第二个视图中的条件,对数据模型进行进一步的筛选和排序,得到符合条件的数据。这个过程需要不断地进行计算和索引操作,会消耗大量的计算资源,从而导致性能下降。

因此,如果两个视图中用到同一个表,并且两个视图之间存在关联关系,建议尽可能减少对表的查询和更新操作,或者考虑对表进行分区或索引优化,以提高数据库的性能。

解决方式

重新建立视图,将需要的字段内容,合为一个新视图,避免用到两次表,导致效率非常低,调整后like查询只需要。0.1秒就可以完成查询

编辑
2023-07-19
项目分享
00

前提

配置要求

centos 7.6 内存16g 硬盘500g cpu>8 核心数>2

检查

输入命令cat /etc/selinux/config,查看SELINUX配置项,如果不是disabled,需修改

方式1:对于linux vi命令不熟悉的

  1. 通过linux连接工具(xftp等)将文件拷贝出去,修改完再粘贴覆盖掉
  2. 重启linux系统,执行reboot命令,一定要重启!

方式2:使用vi操作修改文件

  1. vi /etc/selinux/config
  2. 按下键盘上的i键位,文件下方会出现如下标识
  3. 通过键盘的上下左右,找到要修改的那行,进行修改,将SELINUX修改成disabled
  4. 按下键盘的Esc键位,此时文件下方的--INSERT--标识消失
  5. 按下键盘的Shift和: 两个同时按,然后输入wq,按下Enter,修改完毕 执行重启命令: reboot,一定要重启!

Docker安装

1.在/opt目录下创建software文件夹 2.将docker-19.03.6.tgz上传至此文件夹中,即/opt/software目录 3.执行命令进入此文件夹,

cd /opt/software

4.执行解压命令:

tar xzvf docker-19.03.6.tgz

5.执行命令:

cp docker/* /usr/bin/

此命令的作用是将解压出来的docker文件夹中的所有文件拷贝至/usr/bin目录下 cd /usr/bin/ 6.执行命令:

dockerd &

启动docker 7.执行命令:

docker info

查看是否已安装成功 至此,如上图所示docker已安装完成,为了让docker可受systemctl命令控制,我们还可以做进一步扩展:

8.执行命令:

cp docker.socket /etc/systemd/system cp docker.service /etc/systemd/system

命令的作用是将docker.service和docker.socket文件拷贝至/etc/systemd/system目录

9.重启 systemctl 守护进程

执行命令:

systemctl daemon-reload

10.将docker 服务加入开机自启动:

执行命令:

systemctl enable docker