
1.安装客户端准备30G2.从官方Instant Client for Linux x86-64 (64-bit) | Oracle 中国下载需要的文件instantclient_basic,instantclient_sqlplus,instantclient_tools,instantclient_jdbc,instantclient_odbc;作者本人使用Ubuntu20系统安装了当时最新的.rpm23年的3.接着从这个网站 Precompiler Downloads | Oracle 中国 安装 instantclient-precomp 找到和原来匹配的包进行下载4.安装需要的工具sudo apt-get install aliensudo apt-get install libaio15.对每个包进行安装sudo alien orac............rpmsudo dpkg -i oracle-instant...................deb(如果安装失败也可以使用zip然后用unzip解压后配置只要和配置文件的目录能对应就没有什么问题)6.配置文件在~/.bashrc文件 或者 /etc/profile 文件后面加上vim ~/.bashrc 或 vim /etc/profile记得修改为你的目录和ORACLE_SIDexport ORACLE_HOME/usr/lib/oracle/23/client64export LD_LIBRARY_PATH$ORACLE_HOME/lib:/usr/lib64:$LD_LIBRARY_PATHexport TNS_ADMIN$ORACLE_HOME/network/adminexport PATH$PATH:$ORACLE_HOME/bin:$HOME/binexport ORACLE_SIDORCL使用命令 source /etc/profile 或者 source ~/.bashrc执行printenv PATH可以看到是否配置成功。7.配置数据库连接的相关文件要根据自己情况修改192.168.1.176oracle123456这三个地方参考Ubuntu23.04安装oracle工具sqlplus_ubuntu 安装sqlplus-CSDN博客lllubuntu:~/Desktop$ cat /etc/odbc.ini[ORCL_DSN]Driver OracleDriverServerName 192.168.1.176:1521/orcl#ServerName orclUserID oraclePassword 123456lllubuntu:~/Desktop$ cat /usr/lib/oracle/23/client64/network/admin/tnsnames.oraORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.176)(PORT 1521))(CONNECT_DATA (SERVER DEDICATED)(SERVICE_NAME orcl)))8. Window安装服务端因为Linux没装上可能是因为Ubuntu_没搞懂-_-||windows比较好安装反正工作中会连公司的数据库好吧作者就是有点懒欢迎会的小伙伴留言参考Oracle19c最新版保姆级别最详细的安装配置教程_oracle19c安装步骤详细-CSDN博客要用管理员打开lsnrctl start #如果监听未启动使用以下命令启动如果ip切换后其他电脑连接不上这个数据库可以在原来改ip的那个文件listener.ora中修改ip并在window powershell中执行lsnrctl stop sqlplus / as sysdba SQL SHUTDOWN IMMEDIATE; SQL STARTUP; lsnrctl start这个设置完如果连接不上使用sqlplus oracle/123456orcl可以重新设置密码9.测试sqlplussqlplus oracle/123456orcl10.使用proc预编译.pc文件如果使用proc没有反应要把proc在原来下载的precomp中复制到/usr/lib/oracle/23/client64/bin下这样就不用重新配置不然就要找到proc的目录再配置一下文件接着proc出现下面内容就是成功了。参考打造ubuntu下精简版的oracle客户端及pro*c编译环境 - 冷侃 - 博客园不过还是有一个小问题就是.pc文件读头文件失败了只能等它编译后再加给.c文件。找到了解决这个小问题的方法就是配置下图System default option values taken from: /usr/lib/oracle/23/client64/precomp/admin/pcscfg.cfg的这个文件只保留#include stdio.h#include stdlib.h#include string.h#include sqlca.h这几个文件所在的路径加上系统头文件的路径其他多余的都删除查找方式可以是sudo find / -name stdio.h我的编辑内容sys_include(/usr/lib/gcc/x86_64-linux-gnu/9/include,/usr/lib/oracle/23/client64/instantclient_23_6/sdk/include,/usr/include)define__x86_64__define_MATH_H下面是一个简单示例这是一个旧版本示例新版本可以看Ubuntu中Pro*c使用示例-CSDN博客Makefile# 设置Oracle客户端的路径 ORACLE_HOME ? /usr/lib/oracle/23/client64 # 定义编译器和编译选项 PROC :proc CC : gcc CFLAGS : -I$(ORACLE_HOME)/instantclient_23_6/sdk/include LDFLAGS : -L$(ORACLE_HOME)/lib -lclntsh -Wl,-rpath,$(ORACLE_HOME)/lib # 定义源文件和目标文件 PC_FILE : main.pc C_FILE : main.c TMP_C_FILE : tmp.c OBJ_FILE : main.o EXECUTABLE : main all: $(EXECUTABLE) $(C_FILE) # 预编译使用 proc 工具将.pc 文件转换为.c 文件并存到临时文件 $(TMP_C_FILE): $(PC_FILE) $(PROC) $(PC_FILE) cp $(C_FILE) $(TMP_C_FILE) if [ $$? -ne 0 ]; then \ echo Error running proc on $(PC_FILE); \ exit 1; \ fi # 添加头文件 $(C_FILE): $(TMP_C_FILE) { \ echo #include stdio.h; \ echo #include stdlib.h; \ echo #include string.h; \ echo #include sqlca.h; \ cat $(TMP_C_FILE); \ } $(C_FILE) rm $(TMP_C_FILE) # 编译将.c文件编译为.o目标文件 $(OBJ_FILE): $(C_FILE) $(CC) $(CFLAGS) -c $ -o $ # 链接将目标文件链接为可执行文件 $(EXECUTABLE): $(OBJ_FILE) $(CC) $^ $(LDFLAGS) -o $ .PHONY:clean # 清理执行make clean时删除生成的文件 clean: rm -f $(C_FILE) $(OBJ_FILE) $(EXECUTABLE) $(TMP_C_FILE)main.pcint insert(){ EXEC SQL BEGIN DECLARE SECTION; char insert_stmt[200]; char insert_name[16]; char insert_pasw[16]; EXEC SQL END DECLARE SECTION; // 插入操作示例 printf(\n请输入要插入的用户名: ); scanf(%s, insert_name); printf(请输入要插入的密码: ); scanf(%s, insert_pasw); sprintf(insert_stmt, INSERT INTO USERS (username, password) VALUES (%s, %s), insert_name, insert_pasw); EXEC SQL PREPARE insert_prepared_stmt FROM :insert_stmt; EXEC SQL EXECUTE insert_prepared_stmt; if (sqlca.sqlcode! 0) { printf(执行插入操作时出现错误错误码: %d错误信息: %s\n, sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); } else { printf(成功插入一条记录\n); } } int main() { EXEC SQL BEGIN DECLARE SECTION; char szUsername[16]; VARCHAR varPassword[16]; char *szStmt1 CREATE TABLE USERS(id NUMBER(4) GENERATED ALWAYS AS IDENTITY,username VARCHAR2(15) NOT NULL,password VARCHAR2(15) NOT NULL); EXEC SQL END DECLARE SECTION; // 连接到数据库 EXEC SQL CONNECT :oracle/123456orcl; if (sqlca.sqlcode! 0) { printf(数据库连接失败错误码: %d错误信息: %s\n, sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); return -1; } EXEC SQL EXECUTE IMMEDIATE :szStmt1; insert(); // 回滚 // EXEC SQL ROLLBACK WORK RELEASE; // 提交事务并断开数据库连接 EXEC SQL COMMIT WORK RELEASE; return 0; }参考pro*c的使用 - 简书