百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Node-Red魔改版本连接Oracle数据库

wptr33 2024-12-26 17:07 28 浏览

一、 Oracle数据库环境搭建

使用前需要进行Oracle数据库客户端环境的安装,前往Oracledb官网,进入适用于 Microsoft Windows (x64) 64 位的 Oracle Instant Client 下载页面:

下载链接:https://pan.baidu.com/s/1XTbW55YLQrLA5y-rjSMAVw 提取码:hcwl(永久有效),注:改安装包不支持winds7系统

下载下来的oracledb安装包建议放在盘符根目录下,例如:D:\instantclient_19_12

接下来就是进行系统环境变量的配置,按官网要求需要配置三处地方:

1、变量名:ORACLE_HOME,变量值:D:\instantclient_19_12

2、变量名:TNS_ADMIN,变量值:D:\instantclient_19_12

3、path 新增 D:\instantclient_19_12

到此windows版本oracle客户端环境配置完成。

Linux系统的采集控制系统会在出厂前布置好,但如果您拿到的Linux系统采集控制软件还未部署oracle客户端环境,按照下述进行操作:

前往Oracledb官网,进入适用于 Linux x86-64(64 位)的 Oracle Instant Client 下载页面:

适合的basic包以及 SQL*Plus 包中的 sqlplus 等二进制文件下载完毕

下载链接:https://pan.baidu.com/s/1t0OzNf1CB8giRl321ARpfQ 提取码:hcwl

  1. 将下载下来的安装包解压缩到单个目录中,例如/opt/oracle/instantclient_19_15,您的应用程序可以访问的目录:
cd /opt/oracle      
unzip instantclient-basic-windows.x64-19.15.0.0.0dbru-2.zip
  1. 安装操作系统libaio包。libaio1这在某些 Linux 发行版上调用:
sudo apt install libaio-dev
  1. 如果 Instant Client 是此系统上安装的唯一 Oracle 软件,则更新运行时链接路径:
sudo sh -c "echo /opt/oracle/instantclient_19_15 > \
      /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
  1. 使用 SQL*Plus 包中的 sqlplus 等二进制文件,请将instantclient-sqlplus-windows.x64-19.15.0.0.0dbru-2压缩包中的文件解压后,打开复制里面的文件放置到 Basic 包instantclient_19_15相同的文件中去,然后更新您的PATH环境变量:
export PATH=/opt/oracle/instantclient_19_15:$PATH
  1. 启动您的应用程序。

到此Linux版本oracle客户端环境配置完成。

二 、采控系统

打开采控系统,在左侧采集引擎节点区找到oracledb,按住鼠标左键拖入到中间的配置区。

双击oracledb组件节点,在弹出的配置标签页中点击下图箭头所指位置。

配置服务器地址、端口以及对应的数据库库名。

切换至安全页面,输入数据库账户和密码,

点击部署按钮,即可看到数据库连接成功。

下面,我们可以进行数据库的数据查询、写入等操作。

以查询为例,我们从左侧通用节点区拉出定时器调试控件以及function函数,与oracledb控件节点连起来,以完成网络中信息的处理、发送接收和转发。(定时器用于定时或手动触发采集控件采集信息,调试是为了采集控件采集到的数据展示至右侧数据窗口。)

双击function函数,在其中写入数据库查询的语句。

最后点击部署,点击定时器触发查询oracle数据库的操作,通过调试节点,在右侧调试窗口即可看到查询到的数据库数据。

如果您需要将采集到的设备数据写入oracle数据库,需前往数据库查看字段数据,例:

create table tc_cbb_file(
cbb01  varchar2(40) not null,  /*测试记录SN*/
cbb02  date,         /*检测日期,date 2022/06/01*/
cbb03  varchar2(8),       /*检测时间,time HH:MM:SS*/
cbb04  varchar2(10),     /*机台号,QM0001*/
cbb05  varchar2(5),         /*检测员,工号 10101*/
cbb06  varchar2(1),        /*检测结果,Y/N*/
cbb07  varchar2(10),     /*机台号*/
cbb08  number(6,3),       /*检测压力 Pa*/
cbb09  number(6,3),       /*检测时长 s*/
cbb10  number(6,3),          /*压差值*/
cbb011  varchar2(40)         /*产品追溯码*/
);

以上有11个字段,我们先添加一个function函数传入模拟设备数据(如有实际设备传入实际值)。

模拟设备数据function函数代码如下:

function dateFormat(fmt, date) {
    let ret;
    const opt = {
        "y+": date.getFullYear().toString(),        // 年
        "m+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "H+": date.getHours().toString(),           // 时
        "M+": date.getMinutes().toString(),         // 分
        "S+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        }
    }
    return fmt;
}

let ntime = new Date()

msg.payload={
    "date":dateFormat("yyyy-mm-dd", ntime),
    "times":dateFormat("HH:MM:SS", ntime),
    "device":"QM101",
    "results":"Y",
    "code":"",
    "outvalue":50.365,
    "pressure":355.635
}
return msg;

然后我们在oracle插入语句的function中写入插入语句。

插入数据库代码函数如下:

msg.query = `insert into fjjp.tc_cbb_file (cbb01, cbb02, cbb03, cbb04, cbb05, cbb06, cbb07, cbb08, cbb09, cbb10, cbb011)values ('${msg.payload.code}', to_date('${msg.payload.date}','yyyy-mm-dd'), '${msg.payload.times}', '${msg.payload.device}', null, '${msg.payload.results}', null,'${msg.payload.pressure}',null,'${msg.payload.outvalue}',null )`
return msg;

点击触发器,在右侧调试窗口即可获得写入成功的信息,完成对Oracle数据库写入的操作。

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...