存储过程批量修改数据库中部分表中的ip信息

一、背景

项目中涉及到环境迁移,迁移过程中,原来的数据库(oracle)中应用ip和数据库ip地址均未变更,每次都是手动修改,想通过存储过程快捷执行

二、修改目标:

把相关几个表格的ip地址变更为其他ip地址

三、脚本参考:

create or replace procedure reset_choice_env(service_host in varchar, db_host in varchar)
as
    db_host_suf varchar2(100);
begin
    db_host_suf := substr(db_host, instr(db_host, '.', 1, 3) + 1);
    update APP_CENTER.APP_SYS
    set value=regexp_replace(value, '172.16.3.(25[0-5]|2[0-4]\d|((1\d\d)|([1-9]?\d)))', service_host)
    where key = 'APP_VISIT_URL';

    update APP_CENTER.APPLICATION_INFO
    set URL = regexp_replace(URL, '172.16.3.(25[0-5]|2[0-4]\d|((1\d\d)|([1-9]?\d)))', service_host);

    update APP_CENTER.DATASOURCE
    set UNIQUEDB=db_host_suf, URL = regexp_replace(URL, '172.16.3.(25[0-5]|2[0-4]\d|((1\d\d)|([1-9]?\d)))', db_host);

    update APP_CENTER.DATA_SQL set UNIQUEDB=db_host_suf;

end;

四、调用存储过程

call model.RESET_CHOICE_ENV('192.168.3.99', '192.168.3.100');

五、参考知识点

1、存储过程的使用:存储过程这一篇就够了 - 知乎 (zhihu.com)

2、字符串截取:oracle操作字符串:拼接、截取、查找、替换_oracle拼接字符串函数_叶孤崖的博客-CSDN博客

3、 正则ip匹配:IP地址的正则表达式写法 - 一抹橄榄 - 博客园 (cnblogs.com)

六、出现问题处理:

1、存储过程语法错误:PL/SQL: ORA-00933: SQL 命令未正确结束,

由于:

update CONFIG.O_DY_CONF_THIRD_DATASOURCE
set UNIQUEDB=db_host_suf and URL = regexp_replace(URL, '172.16.3.(25[0-5]|2[0-4]\d|((1\d\d)|([1-9]?\d)))', db_host);

上方使用了and连接,语法错误,修改为逗号“,”连接多个待修改的列即可

2、存储过程定义变量未设置长度:String length constraints must be in range (1 .. 32767)

定义局部变量时为设置长度:

db_host_suf varchar2;

修改为以下即可

db_host_suf varchar2(100);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis(Remote Dictionary Server)是一种开源的缓存数据库,它是用C语言编写的。在项目,我们可以用Java代码编写来使用Redis来实现数据的缓存和快速访问。 首先,我们需要在项目引入Redis的Java客户端库,例如Jedis或Lettuce。然后,我们可以通过以下代码示例来展示Redis在项目的应用。 1. 连接Redis服务器: ``` Jedis jedis = new Jedis("localhost"); // 如果Redis在不同的主机上,需要指定主机的IP地址或域名 ``` 2. 存储数据: ``` jedis.set("key", "value"); ``` 3. 获取数据: ``` String value = jedis.get("key"); ``` 4. 设置过期时间: ``` jedis.expire("key", 60); // 设置key的过期时间为60秒 ``` 5. 删除数据: ``` jedis.del("key"); ``` 6. 使用哈希存储和获取数据: ``` jedis.hset("hash", "field", "value"); String fieldValue = jedis.hget("hash", "field"); ``` 7. 发布和订阅消息: ``` jedis.subscribe(new JedisPubSub() { @Override public void onMessage(String channel, String message) { // 处理接收到的消息 } }, "channel"); jedis.publish("channel", "message"); ``` 上述代码只是Redis在项目的一些简单应用示例,实际应用还有更多的功能和用法,例如使用事务、批量操作、分布式锁等。 总之,Redis在项目的应用可以提供高速的缓存访问和数据存储,能够有效提升系统性能和响应速度。使用Java代码编写,能够更加灵活地操作和管理Redis数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值