LightDB24.1 pro*c 支持EXEC ORACLE OPTION (CHAR_MAP=STRING)

背景介绍

为了方便ORACLE数据库迁移到LightDB数据库,兼容Pro*C的语法规则。从LightDB24.1版本开始ECPG支持EXEC ORACLE OPTION(CHAR_MAP=STRING)。设置该选项后,将保证字符数组已null结尾。

使用约束:

  • 仅支持一维字符数组,保证一维字符数组已null结尾。
  • 仅支持select into到本地数组,保证本地数组null结尾。

使用示例

  1. ecpg源文件
#include <stdio.h>
#include <stdlib.h>

EXEC ORACLE OPTION (RELEASE_cursor = No);
EXEC ORACLE OPTION (char_map=String);
exec sql type string is char[5];
typedef char string[5];

EXEC SQL BEGIN DECLARE SECTION;
struct TBempl
{
  char	a;
  char b[5];
};

union StateMachine
{
char c1[5];
int c2;
};
EXEC SQL END DECLARE SECTION;

int main()
{
	EXEC SQL BEGIN DECLARE SECTION;
	struct TBempl v1;
	struct TBempl v2;
	int i = 0;
	int j = 0;
	string s1;
	string s2[2];
	char arr[2][5];
	struct TBempl v3[2];
	union StateMachine u1;
	EXEC SQL END DECLARE SECTION;
	EXEC SQL WHENEVER SQLWARNING SQLPRINT;
	EXEC SQL WHENEVER SQLERROR SQLPRINT;
	char cc[5];
	EXEC SQL CONNECT TO oracle_test AS main;
	
	EXEC SQL SELECT c1,c2 INTO :v1 from test_struct;
	EXEC SQL SELECT c2 INTO :v2.b from test_struct;
	EXEC SQL SELECT name INTO :s1 from test;
	EXEC SQL SELECT name INTO :s2 from test2;
	EXEC SQL SELECT name INTO :arr from test2;
	EXEC SQL SELECT name INTO :u1.c1 from test;
	EXEC SQL SELECT name INTO :cc from test;
	EXEC SQL SELECT c1,c2 INTO :v3 from test_struct2;
	
	printf("===============struct v1================\n");
        printf("Print ASCII:%x\n",(unsigned char)v1.a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)v1.b[i]);
    	}
	printf("===============struct v2================\n");
        //printf("Print ASCII:%x\n",(unsigned char)v1.a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)v2.b[i]);
    	}
	printf("================string s1===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)s1[i]);
    	}
	printf("================string s2[2]===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)s2[0][i]);
    	}
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)s2[1][i]);
    	}
	printf("================union u1.c1===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)u1.c1[i]);
    	}
	printf("================arr[2][5]===================\n");
	for (i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",(unsigned char)arr[0][i]);
	}
	for (i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",(unsigned char)arr[1][i]);
	}
	printf("================cc[5]===================\n");
	for (i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",(unsigned char)cc[i]);
	}
	printf("================v3[2]===================\n");
        printf("Print ASCII:%x\n",(unsigned char)v3[0].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)v3[0].b[i]);
    	}
	printf("======================================\n");
        printf("Print ASCII:%x\n",(unsigned char)v3[1].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)v3[1].b[i]);
    	}
	EXEC SQL SELECT c1,c2 INTO :v3[1] from test_struct;
	printf("================v3[1]===================\n");
        printf("Print ASCII:%x\n",(unsigned char)v3[1].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",(unsigned char)v3[1].b[i]);
    	}
	
	EXEC SQL DISCONNECT;
}
  1. 编译pgc文件生成c文件,ecpg ecpg_struct.pgc -o ecpg_struct.c
/* Processed by ecpg (13.8) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */

#line 1 "ecpg_struct.pgc"
#include <stdio.h>
#include <stdlib.h>

/* exec oracle option (RELEASE_cursor=No) */
/* exec oracle option (char_map=String) */

/* exec sql type string is char [ 5 ] */
#line 7 "ecpg_struct.pgc"

  typedef char  string [ 5 ];

#line 8 "ecpg_struct.pgc"

#line 8 "ecpg_struct.pgc"


/* exec sql begin declare section */
 

  	
   


 

 
 

struct TBempl { 
#line 13 "ecpg_struct.pgc"
 char a ;
 
#line 14 "ecpg_struct.pgc"
 char b [ 5 ] ;
 } ; union StateMachine { 
#line 19 "ecpg_struct.pgc"
 char c1 [ 5 ] ;
 
#line 20 "ecpg_struct.pgc"
 int c2 ;
 } ;/* exec sql end declare section */
#line 22 "ecpg_struct.pgc"


 int  main ( )
#line 24 "ecpg_struct.pgc"

{
	/* exec sql begin declare section */
	  
	  
	   
	   
	 
	 
	 
	  
	  
	
#line 27 "ecpg_struct.pgc"
 struct TBempl v1 ;
 
#line 28 "ecpg_struct.pgc"
 struct TBempl v2 ;
 
#line 29 "ecpg_struct.pgc"
 int i = 0 ;
 
#line 30 "ecpg_struct.pgc"
 int j = 0 ;
 
#line 31 "ecpg_struct.pgc"
 string s1 ;
 
#line 32 "ecpg_struct.pgc"
 string s2 [ 2 ] ;
 
#line 33 "ecpg_struct.pgc"
 char arr [ 2 ] [ 5 ] ;
 
#line 34 "ecpg_struct.pgc"
 struct TBempl v3 [ 2 ] ;
 
#line 35 "ecpg_struct.pgc"
 union StateMachine u1 ;
/* exec sql end declare section */
#line 36 "ecpg_struct.pgc"

	/* exec sql whenever sql_warning  sqlprint ; */
#line 37 "ecpg_struct.pgc"

	/* exec sql whenever sqlerror  sqlprint ; */
#line 38 "ecpg_struct.pgc"

	
	 
#line 40 "ecpg_struct.pgc"
 char cc [ 5 ] ;

#line 40 "ecpg_struct.pgc"

	{ ECPGconnect(__LINE__, 0, "oracle_test", NULL, NULL, "main", 0); 
#line 41 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 41 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 41 "ecpg_struct.pgc"

	
	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select c1, c2 from test_struct", ECPGt_EOIT, 
	ECPGt_char,&(v1.a),(long)1,(long)1,sizeof( struct TBempl ),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, 
	ECPGt_char,&(v1.b),(long)5,(long)1,sizeof( struct TBempl ),1L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 44 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 44 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 44 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select c2 from test_struct", ECPGt_EOIT, 
	ECPGt_char,(v2.b),(long)5,(long)1,(5)*sizeof(char),1L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 45 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 45 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 45 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select name from test", ECPGt_EOIT, 
	ECPGt_char,(s1),(long)5,(long)1,(5)*sizeof(char),1L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 46 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 46 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 46 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select name from test2", ECPGt_EOIT, 
	ECPGt_char,(s2),(long)5,(long)2,(5)*sizeof(char),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 47 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 47 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 47 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select name from test2", ECPGt_EOIT, 
	ECPGt_char,(arr),(long)5,(long)2,(5)*sizeof(char),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 48 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 48 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 48 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select name from test", ECPGt_EOIT, 
	ECPGt_char,(u1.c1),(long)5,(long)1,(5)*sizeof(char),1L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 49 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 49 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 49 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select name from test", ECPGt_EOIT, 
	ECPGt_char,(cc),(long)5,(long)1,(5)*sizeof(char),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 50 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 50 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 50 "ecpg_struct.pgc"

	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select c1, c2 from test_struct2", ECPGt_EOIT, 
	ECPGt_char,&(v3->a),(long)1,(long)2,sizeof( struct TBempl ),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, 
	ECPGt_char,&(v3->b),(long)5,(long)2,sizeof( struct TBempl ),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 51 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 51 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 51 "ecpg_struct.pgc"

	
	printf("===============struct v1================\n");
        printf("Print ASCII:%x\n",( unsigned char)v1.a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)v1.b[i]);
    	}
	printf("===============struct v2================\n");
        //printf("Print ASCII:%x\n",(unsigned char)v1.a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)v2.b[i]);
    	}
	printf("================string s1===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)s1[i]);
    	}
	printf("================string s2[2]===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)s2[0][i]);
    	}
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)s2[1][i]);
    	}
	printf("================union u1.c1===================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)u1.c1[i]);
    	}
	printf("================arr[2][5]===================\n");
	 for(i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",( unsigned char)arr[0][i]);
	}
	 for(i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",( unsigned char)arr[1][i]);
	}
	printf("================cc[5]===================\n");
	 for(i=0;i<5;i++)
	{
		printf("Print ASCII:%x\n",( unsigned char)cc[i]);
	}
	printf("================v3[2]===================\n");
        printf("Print ASCII:%x\n",( unsigned char)v3[0].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)v3[0].b[i]);
    	}
	printf("======================================\n");
        printf("Print ASCII:%x\n",( unsigned char)v3[1].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)v3[1].b[i]);
    	}
	{ struct lt_ecpg_config lt_conf;lt_conf.ecpg_version_num=LT_ECPG_CONFIG_VERSION;lt_conf.oracle_char_map=1;ECPGdo(__LINE__, 0, 1, NULL, 0, &lt_conf, ECPGst_normal, "select c1, c2 from test_struct", ECPGt_EOIT, 
	ECPGt_char,&(v3[1].a),(long)1,(long)1,sizeof( struct TBempl ),0L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, 
	ECPGt_char,&(v3[1].b),(long)5,(long)1,sizeof( struct TBempl ),1L, 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 108 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 108 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 108 "ecpg_struct.pgc"

	printf("================v3[1]===================\n");
        printf("Print ASCII:%x\n",( unsigned char)v3[1].a);
	printf("======================================\n");
	for(i=0;i<5;i++) {
        	printf("Print ASCII:%x\n",( unsigned char)v3[1].b[i]);
    	}
	
	{ ECPGdisconnect(__LINE__, "CURRENT");
#line 116 "ecpg_struct.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 116 "ecpg_struct.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 116 "ecpg_struct.pgc"

}
  1. 编译c文件生成bin文件,运行得到结果,会发现只有一维数组添加了null结尾
gcc ecpg_struct.c -lecpg -lpgtypes -o ecpg_charmap -I /home/lightdb/stage/lightdb-x/include/ -L/home/lightdb/stage/lightdb-x/lib
[lightdb@192 ~]$ ./ecpg_charmap
===============struct v1================
Print ASCII:48
======================================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:44
Print ASCII:0
===============struct v2================
======================================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:44
Print ASCII:0
================string s1===================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:20
Print ASCII:0
================string s2[2]===================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:20
Print ASCII:20
======================================
Print ASCII:44
Print ASCII:45
Print ASCII:46
Print ASCII:20
Print ASCII:20
================union u1.c1===================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:20
Print ASCII:0
================arr[2][5]===================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:20
Print ASCII:20
Print ASCII:44
Print ASCII:45
Print ASCII:46
Print ASCII:20
Print ASCII:20
================cc[5]===================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:20
Print ASCII:20
================v3[2]===================
Print ASCII:48
======================================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:44
Print ASCII:45
======================================
Print ASCII:49
======================================
Print ASCII:46
Print ASCII:47
Print ASCII:48
Print ASCII:49
Print ASCII:4a
================v3[1]===================
Print ASCII:48
======================================
Print ASCII:41
Print ASCII:42
Print ASCII:43
Print ASCII:44
Print ASCII:0
[lightdb@192 ~]$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/568726.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维 kubernetes(k8s)基础学习

一、容器相关 1、发展历程&#xff1a;主机–虚拟机–容器 主机类似别墅的概念&#xff0c;一个地基上盖的房子只属于一个人家&#xff0c;很多房子会空出来&#xff0c;资源比较空闲浪费。 虚拟机类似楼房&#xff0c;一个地基上盖的楼房住着很多人家&#xff0c;相对主机模式…

【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

springboot论文格式系统

采用springbootmysqlhtmlvue技术 详细运行视频地址B站运行效果视频地址 &#xff08;1&#xff09;系统具备用户管理功能&#xff0c;包括用户注册、登录、权限管理等功能。 &#xff08;2&#xff09;系统具备格式规范管理功能&#xff0c;包括格式规范创建、编辑、删除等操…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构&#xff0c;各个文件夹都是做什么的&#xff1f;1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录&#xff1a;使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

面试八股——RabbitMQ

消息丢失问题 消息确认机制 生产者与MQ之间的消息确认&#xff1a; 当MQ成功接收消息后&#xff0c;会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息&#xff0c;则任务消息发送失败。 MQ与消费者之间的消息确认&#xff1a; 当MQ成功接收消息后&#…

related_name和related_query_name属性

在Django模型继承中&#xff0c;假如在外键或多对多字段中使用了related_name属性或related_query_name属性&#xff0c;则必须为该字段提供一个独一无二的反向名字和查询名字。但是&#xff0c;这样在抽象基类中一般会引发问题&#xff0c;因为基类中的字段都被子类继承并且保…

Python网络爬虫-详解XPath匹配网页数据

前言 XPath&#xff0c;全称XML Path Language&#xff0c;即XML路径语言&#xff0c;它是一门在XML文档中查找信息的语言。XPath使用路径表达式来选取XML文档中的节点或节点集。这些节点是通过沿着路径&#xff08;path&#xff09;或者步&#xff08;steps&#xff09;来选取…

从0到1—POC编写基础篇(一)

POC编写基础篇 POC的概念 在网络安全领域中&#xff0c;POC的概念是指"Proof of Concept"&#xff0c;也被称为"攻击验证"。它是指安全研究人员或黑客用来证明某个漏洞、弱点或安全问题存在的实证或演示。 网络安全研究人员经常通过开发POC来展示一个漏洞的…

【Node.js】03 —— HTTP 模块探索

&#x1f31f;Node.js之HTTP模块探索✨ &#x1f31f;引言 在网络编程中&#xff0c;HTTP协议无处不在。在Node.js的世界里&#xff0c;我们可以通过内置的http模块来轻松创建HTTP服务器和客户端&#xff0c;实现数据的接收和发送。今天就让我们一起打开这扇门&#xff0c;探索…

SpringBoot + kotlin 协程小记

前言&#xff1a; Kotlin 协程是基于 Coroutine 实现的&#xff0c;其设计目的是简化异步编程。协程提供了一种方式&#xff0c;可以在一个线程上写起来像是在多个线程中执行。 协程的基本概念&#xff1a; 协程是轻量级的&#xff0c;不会创建新的线程。 协程会挂起当前的协…

MATLAB 数据类型

MATLAB 数据类型 MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名&#xff0c;它就创建变量并分配适当的内存空间。 如果变量已经存在&#xff0c;那么MATLAB将用新内容替换原始内容&#xff0c;并在必要时分配新的存储空间。 例如&#xff0c; Tota…

CentOS-7安装grafana

一、通用设置&#xff08;分别在4台虚拟机设置&#xff09; 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服…

(Oracle)SQL优化案例:组合索引优化

项目场景 项目上的ETL模型里有如下SQL语句。执行速度非常慢&#xff0c;每次只查询200条数据&#xff0c;但却需要20多秒的时间。再加上该SQL查询出的数据同步频率很高&#xff0c;这个速度是完全不能忍受的。 因为项目隐私&#xff0c;所以对表及字段做了改写。 SELECT ID…

SVN小乌龟汉化问题

1.首先确认中文语言包和SVN版本需要一致&#xff08;点击右键 选择最后一个选项即可查看&#xff09; 官网链接 点击这个官网链接可以下载对应版本的中文包 2.下载好之后直接无脑下一步安装即可 3.如果还是没有中文&#xff0c;找到这个文件夹&#xff0c;把里面的内容全部删…

SpaceX的核心Fact Sheet

首先给大家分享一组SpaceX的关键数据&#xff0c;让大家对这个神秘公司有个定量认知&#xff1a; 2024年SpaceX预计收入可达130亿美金&#xff0c;同比增长54%&#xff0c;预计2035年可达1000亿美金 SpaceX目前已经处于盈利状态&#xff0c;具体利润规模未知 SpaceX的发射成本…

Kotlin语法入门-类与对象(6)

Kotlin语法入门-类与对象(6) 文章目录 Kotlin语法入门-类与对象(6)六、类与对象1、声明和调用2、get和set3、init函数初始化4、constructor构造函数4.1、主构造函数4.2、二级构造函数4.3、多个构造函数4.4、省略主构造函数并写了次构造函数 5、类的继承与重写5.1、继承5.2、继承…

每天五分钟计算机视觉:基于YOLO算法精确分类定位图片中的对象

滑动窗口的卷积的问题 滑动窗口的卷积实现效率很高,但是它依然不能够输出最精准的边界框,比如下面所示: 我们可以看到蓝色框不论在什么位置都不能很好的确定车的位置,有一个算法是YOLO 算法它能够帮助我们解决这个问题。 YOLO 算法 比如我们的输入图像是100*100,我们会…

TCP相关问题总结

文章目录 TCP连接建立过程1. TCP三次握手2. TCP四次挥手3. TCP为什么是三次握手4. TCP为什么是四次挥手 TCP流量控制TCP拥塞控制1. 为什么需要拥塞控制2. 控制手段 TCP连接建立过程中出现丢包 TCP连接建立过程 1. TCP三次握手 首先client端发出连接请求&#xff0c;并且请求同…

在 VSCode 中运行 C#

文章目录 1.为何选择VSCode而不是VS2.操作步骤2.1 安装.NET2.2 安装扩展插件2.2.1 C#2.2.2 Code Runner 3.新建工程HelloCsharp 1.为何选择VSCode而不是VS VS实在是太“重”了&#xff0c;如果只是写一些简单控制台程序进行调试&#xff0c;则完全没必要 2.操作步骤 2.1 安装…

线性代数 --- 矩阵的对角化以及矩阵的n次幂

矩阵的对角化以及矩阵的n次幂 &#xff08;特征向量与特征值的应用&#xff09; 前言&#xff1a; 在上一篇文章中&#xff0c;我记录了学习矩阵的特征向量和特征值的学习笔记&#xff0c;所关注的是那些矩阵A作用于向量x后&#xff0c;方向不发生改变的x(仅有尺度的缩放)。线…
最新文章