ORACLE数据库PROC编程经验介绍(转载)

Oracle_ProC编程入门 Oracle_ProC编程入门,感觉还有点用 立即下载
PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。
例子程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
EXEC SQL INCLUDE sqlca;
/*RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源*/
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION;
varchar vc_user[20];
long al_empno=0;
char ac_ename[11]="";
char ac_hiredate[20]="";
double af_sal=0;
EXEC SQL VAR ac_ename IS STRING(11);
EXEC SQL VAR ac_hiredate IS STRING(20);
EXEC SQL END DECLARE SECTION;
/*错误处理函数*/
void sql_error(char *msg)
{
printf("/n%s,%ld,%s/n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(-1);
}
main()
{
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");
/*连接数据库*/
strcpy(vc_user.arr,"scott/tiger@DEMO");
vc_user.len=16;
exec sql connect :vc_user;
EXEC SQL DECLARE cur_emp CURSOR FOR
SELECT EMPNO, ENAME,to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),SAL FROM EMP;
EXEC SQL OPEN cur_emp;
while(1)
{
al_empno=0;
strcpy(ac_ename,"");
strcpy(ac_hiredate,"");
af_sal=0;
EXEC SQL FETCH cur_emp INTO :al_empno, :ac_ename:ename_ind, :ac_hiredate:hiredate_ind, :af_sal:sal_ind;
if( sqlca.sqlcode == 1403)
{
break;
}
printf("empno=%ld,ename=%s,hiredate=%s,sal=%lf/n",al_empno,ac_ename,ac_hiredate,af_sal);
}
EXEC SQL CLOSE cur_emp;
EXEC SQL ROLLBACK WORK RELEASE;
}
1、宿主变量的声明
在PROC中,在SQL语句中用到的变量称为宿主变量。他们应在EXEC SQL BEGIN DECLARE SECTION;与EXEC SQL EDN DECLARE SECTION;
之间声明,如上面所示.在声明宿主变量时应注意以下几点:
(1) 在数据库表中定义为VARCHAR2,VARCHAR,CHAR的字段,在PROC中可声明为CHAR,但长度应为它们在表中定义的长度加1,因为PROC中
CHAR型变量用/0做结尾。
如:ENAME在表中的定义为ename varchar2(10),在PROC中可定义为:
EXEC SQL BEGIN DECLARE SECTION;
char ename[11];
EXEC SQL END DECLARE SECTION;
常见错误说明:
如果插入的字符串长度大于10,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901');会出现以下错误:
error:ORA-01480: STR 赋值变量缺少空后缀。
如果定义为:
EXEC SQL BEGIN DECLARE SECTION;
char ename[15];
EXEC SQL END DECLARE SECTION;
当插入的字符串长度大于10,小于15时,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901');会出现以下错误:
error:ORA-01401: 插入的值对于列过大。
当插入的字符串长度大于15,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES('12345678901234');会出现以下错误:
error:ORA-01401:STR 赋值变量缺少空后缀。
(2) 从SQL语句中取字段的值到宿主变量中时,PROC不会自动给宿主变量去掉右空格。而是以在DECLARE SECTION 中定义的长度为准(与 表中定义的无关)不足补右空格.如果不注意这一点,在PROC中进行字符串操作时(如比较相等)会出错。如:
EXEC SQL BEGIN DECLARE SECTION;
char ename[10];
EXEC SQL END DECLARE SECTION;
如果ENAME在表中的值为'abc',则取出的值为'abc ';
可用语句EXEC SQL VAR重定义CHAR型变量。这样宿主变量会自动去掉右空格。如下:
EXEC SQL BEGIN DECLARE SECTION;
char ename[11];
EXEC SQL VAR ac_ename IS STRING(11);
EXEC SQL END DECLARE SECTION;
如果ENAME在表中的值为'abc',则取出的值为'abc';
(3) 对浮点型的变量,为保证精度,最好是声明成DOUBLE型的.因为DOUBLE型的精度比FLOAT型高很多.
(4) 整型可声明为LONG型(对较长的整型,而且所用的平台支持的话,如在SUN平台上,可声明为LONG LONG型).
(5) DATE型的处理:DATE型一般声明为CHAR(20)。
往表中插入DATE型数据时,一般用TO_DATE()函数进行类型转换,取出值时一般用TO_CHAR()函数进行类型转换.
EXEC SQL select to_char(hiredate,'yyyy/mm/dd hh24:mi:ss') into :ac_hire_date from EMP where empno=1234;
EXEC SQL insert into EMP(EMPNO,HIREDATE) values(123,to_date(:ac_hiredate,'yyyy/mm/dd hh24:mi:ss');
2、宿主变量的作用范围
如果宿主变量在所有的函数之外声明,则他们是全局变量。在使用之前要注意把变量的值初始化,宿主变量也可以在某个函数的内部定义。 这时他们是局部变量。一般都习惯把宿主变量声明为全局变量。
3、数据库的连接与断开
数据库的连接有以下两种方法:
(1)
strcpy(vc_user.arr,"scott/tiger");
vc_user.len=11;
exec sql connect :vc_user;
(2)
strcpy(user,"scott");
strcpy(pass,"tiger");
exec sql connect :user identified by :pass;
注意:在有些平台上两种都可以,在有些平台上只能用第一种方法.
在PROC程序中,要记住用EXEC SQL ROLLBACK WORK RELEASE;断开与数据库的连接,并释放相关的数据库资源。
4、PROC中的NULL值的处理
如果某一字段取出的值是NULL,会报:sqlcode=-1405, sqlerr=ORA-01405: 读取的列值为 NULL
并且相应的宿主变量的值不会被改变,为执行该SQL语句之前的值. 常用的处理NULL值的方法有:
(1)采用指示器变量,此时不会有-1405错误,当必须是所以为NULL的字段都有相应的指示器变量,如果某一字段没有指示器变量,但取出的值
为NULL值,则仍然会有-1405错误.当取出的值是NULL时,相应的指示器变量变量为-1,可根据指示器变量的值做响应的处理。
(2)如果字段较多,可取字段到一个结构体中及与该结构体对应的指示器结构体中.如上面的例子中可定义结构体:
struct str_emp{
long al_empno;
char ac_ename;
char ac_hiredate;
double af_sal;
};
struct str_emp_ind{
long al_empno;
char ac_ename;
char ac_hiredate;
double af_sal;
};
struct str_emp str_emp;
strcut str_emp_ind str_emp_ind;
在取之前可用memset(&str_emp,0,sizeof(str_emp)).清空该结构体,这样如果是字符型的NULL,会为"",整型的NULL会为0,
浮点型的会为0.00。此时不会有-1405错误。
(3)也可采用NVL()函数:举例如下:
EXEC SQL DECLARE authors CURSOR FOR
SELECT EMPNO, NVL(ENAME,chr(0)),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),chr(0)),NVL(SAL,0) FROM EMP;
这样也不会有-1405错误不,当取出的值是NULL时,自动用NVL()中指定的值代替.
CHR(0)也可直接用''代替,如下:
SELECT EMPNO, NVL(ENAME,''),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),''),NVL(SAL,0) FROM EMP;
5、PROC中的错误的处理
所有的SQL语句都有可能出错.所以都要加以判断,但每个SQL语句后都加错误判断,太麻烦,可用一个函数如sql_error()来进行错误处理,
方法:
(1)定义ql_error()函数。
(2)在开头加上EXEC SQL WHENEVER SQLERROR DO sql_error();这样当发生sqlca.sqlcode <0 的错误时,程序自动转到sql_error()中执行. 注意:对sqlca.sqlcode >0的错误如 sqlca.sqlcode =1403 是不会转到sql_error()中执行的.
另外:在UNIX下,可以用OERR 来查找错误的描述。如: ora ORA -1405 查找错误号为-1405的描述.
6、PROC中调用存储过程的方法
要把存储过程放在EXEC SQL EXECUTE 和 END-EXEC;之间,如下所示:
其中:al_empno,ac_ename 为输入参数,l_return,l_errno,c_errtext 为输出参数。
al_empno=8888;
strcpy(ac_ename,"ABCD");
EXEC SQL EXECUTE
BEGIN
up_db_emp(:al_empno,:ac_ename,:l_return,:l_errno,:c_errtext);
END;
END-EXEC;
if (l_return != 0)
{
printf("调用UP_PB_EMP存储过程出错,errno=%ld,errtext=%s/n",l_errno,c_errtext);
}
7、PROC的命令行选项:PROC编译器有很多的命令行选项,在命令行下直接不带参数运行PROC,会列出所有的命令行选项来,并有说明。
(1)储存过程:编译储存过程是要带上用户名及密码
proc USERID=scott/tiger sqlcheck=SEMANTICS ireclen=512 iname=test.cpp
(2)PARSE=NONE 对非SQL代码不进行语法分析,默认对非SQL代码也进行语法分析.
在RED HAD6.3上的ORACLE8.1.5中用PROC时,会提示:/USR/INCLUDE/STDIO.H 及其他的.H文件中有错. 可把PARSE=NONE加上,就好了.
8、注意加上:EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源,保证在该PROC程序执行完后,ORACLE不会锁住数据库资源,如锁表等。
如果在PROC中用到ORACA,还要在程序头加上:
EXEC ORACLE OPTION (ORACA=YES);
9、PROC中的类型转换
一、在C语言中:
(1)字符型到整型可用ATOI() ATOL(),SSCANF()
(2)整型,浮点型到字符型,可用SPRINTF()
(3)字符型到浮点型用ATOF()不行,最好用SSCANF(),举例如下:
EXEC SQL BEGIN DECLARE SECTION;
double d_demo;
float f_demo;
char ac_text[20]="222";
EXEC SQL END DECLARE SECTION;
(1)sscanf(ac_text, "%f", &d_demo);
printf("ac_text=%s,d_demo=%f/n",ac_text,d_demo);
(2)sscanf(ac_text, "%lf", &d_demo);
printf("ac_text=%s,d_demo=%f/n",ac_text,d_demo);
(3)sscanf(ac_text, "%f", &d_demo);
printf("ac_text=%s,d_demo=%lf/n",ac_text,d_demo);
(4)sscanf(ac_text, "%lf", &d_demo);
printf("ac_text=%s,d_demo=%lf/n",ac_text,d_demo);
printf("*******************/n");
(5)sscanf(ac_text, "%f", &f_demo);
printf("ac_text=%s,f_demo=%f/n",ac_text,f_demo);
(6)sscanf(ac_text, "%lf", &f_demo);
printf("ac_text=%s,f_demo=%f/n",ac_text,f_demo);
(7)sscanf(ac_text, "%f", &f_demo);
printf("ac_text=%s,f_demo=%lf/n",ac_text,f_demo);
(8)sscanf(ac_text, "%lf", &f_demo);
printf("ac_text=%s,f_demo=%lf/n",ac_text,f_demo);
输出的结果:
ac_text=222.00,d_demo=0.000000
ac_text=222.00,d_demo=222.000000
ac_text=222.00,d_demo=222.000032
ac_text=222.00,d_demo=222.000000
*******************
ac_text=222.00,f_demo=222.000000
ac_text=222.00,f_demo=0.000000
ac_text=222.00,f_demo=222.000000
ac_text=222.00,f_demo=0.000000
d_demo=atof(ac_text);
printf("ac_text=%s,atof(ac_text)=%f/n",ac_text,d_demo);
d_demo=atof(ac_text);
printf("ac_text=%s,atof(ac_text)=%lf/n",ac_text,d_demo);
f_demo=atof(ac_text);
printf("ac_text=%s,atof(ac_text)=%f/n",ac_text,f_demo);
f_demo=atof(ac_text);
printf("ac_text=%s,atof(ac_text)=%lf/n",ac_text,f_demo);
输出的结果:
ac_text=222.00,atof(ac_text)=1243288.000000
ac_text=222.00,atof(ac_text)=1243288.000000
ac_text=222.00,atof(ac_text)=1243288.000000
ac_text=222.00,atof(ac_text)=1243288.000000
从上面的结果可见:
DOUBLE型应采用sscanf(ac_app_capcity, "%lf", &d_app); 打印用"%lf","%f" 都可以. (2),(4)正确
FLOAT型应采用sscanf(ac_app_capcity, "%f", &d_app); 打印用"%lf","%f" 都可以. (5),(7)正确
采用ATOF()转换的结果都是错的,所以不要用它。
二、写表或从表中取数据时:
(1)字符型与整型之间可不用转换,采用默认方式。
(2)字符型与浮点型之间可不用转换,采用默认方式。
(3)日期型与字符型之间可用TO_CHAR(),TO_DATE()。
10、PROC中的4种动态SQL简介
(1)动态SQL1: 不能是查询(SELECT)语句,并且没有宿主变量.
用法:拼一串动态SQL语句,并用EXECUTE IMMEDIATE执行,如:
EXEC SQL EXECUTE IMMEDIATE "CREATE TABLE dyn1 (col1 VARCHAR2(4))";
(2)动态SQL2: 不能是查询(SELECT)语句,并且输入的宿主变量数目是知道的,
用法:拼一串动态SQL语句,用PREPARE,EXECUTE语句执行.
strcpy(c_sql, "DELETE FROM EMP WHERE EMPNO = :?");
EXEC SQL PREPARE sql_stmt FROM :c_sql;
EXEC SQL EXECUTE sql_stmt USING :emp_number;
(3)动态SQL3: 用于创建动态查询, 并且要查询的字段及输入的宿主变量数目是知道的
用法: 拼一串动态SQL语句,用PREPARE分析该语句,并要定义一个CURSOR进行取值
如:如要查询的数据按一年12月放到12张表中。表名为user_fee_1mon, user_fee_2mon,....可采用动态SQL3来进行查询
strcpy(c_sql,"select c_user_id,c_user_name,to_char(t_date,'yyyy/mm/dd hh:mi:ss'),n_fee/n");
strcat(c_sql,"from USER_FEE_");
strcat(c_sql,ac_mon);
strcat(c_sql," /n where c_user_id = :v1");
EXEC SQL PREPARE s FROM :c_sql;
EXEC SQL DECLARE cur_user_fee CURSOR FOR s;
EXEC SQL OPEN cur_user_fee USING :ac_user_id;
while(1)
{
EXEC SQL FETCH cur_user_fee into :c_user_id,:c_user_name,:c_date,:n_fee);
if (sqlca.sqlcode < 0)
{
/*FETCH CURSOR失败*/
printf("fetch cursor cur_user_fee fail,sqlcode=%ld,sqlserr=%s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
}
if( sqlca.sqlcode == SQLNOTFOUND)
{
break;
}
}
EXEC SQL CLOSE cur_user_fee;
(4)动态SQL4:要处理的字段及输入的宿主变量数目和主变量的类型事先是不知道的,如:
INSERT INTO EMP (<unknown>) VALUES (<unknown>)
是最复杂的动态SQL,很少用,在此不做介绍。
11、SQLCA:SQL是ORACLE的一个结构体,它的域用于最近的一条SQL语句执行后的一些信息,如错误号,错误描述,警告,状态等。常用的
域介绍如下:
SQLCA.sqlcode:错误号,=0正确,=1403没取到数据
SQLCA.sqlserrm.sqlerrmc:错误描述
SQLCA.sqlerrd[3]:最近的一条SQL语句所处理的行数,如果该语句处理失败,则它的值是不定的,如果错误在一个CURSOR操作中发生,则
它的值指已成功处理的行数.在DELETE,UPDATE中,它不包含因外键约束而删除,更新的那些行,
DELETE FROM EMP WHERE DEPT='SALE';
在表EMP中删除20行,但如果表EMP与表ADDRESS有外键约束,导致表ADDRESS也被删除20行,则SQLCA.sqlerrd[3]=20,而不是40。

原文地址:http://www.ccw.com.cn/htm/app/aprog/02_1_18_5.asp

人形机器人开源资源大盘点(四):硬件开源平台 开源人形机器人平台推动技术民主化 本期聚焦四大开源人形机器人平台:斯坦福的ToddlerBot以6000美元低成本实现30自由度运动,支持仿真到现实的零样本迁移;法国Reachy2被HuggingFace收购,融合开源AI与硬件,适配医疗、工业等场景;国内OriginMan基于ROS2全开源,集成大模型能力,支持深度改造;OAN框架则为经典NAO机器人注入开源活力,扩展交互功能。这些平台通过不同路径降低研发门槛,推动人形机器人技术走向开放共享的未来。 阅读详情

相关推荐

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1583

proc 动态游标前3种方式的使用(第四种就是sqlda方式)

<br />动态sql技术<br /> 动态sql更加通用,功能更强<br /> /**一般的更新删除查找**/<br /> sqlstr="insert into sprerec values ('....')"<br /> EXEC SQL EXECUTE IMMEDIATE:sqlstr;<br /> /**启动oracle通讯区**/<br /> EXEC ORACLE OPTION (ORACA = YES)<br /> /**使pro c 在执行后,释放与嵌入sql语句有关的资源**/<br /

吴家应的专栏 2659

使用SSE流式输出(Javaweb前后端实战)

SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术。通过SSE,服务器可以主动向客户端发送更新,而无需客户端不断发起请求。这对于需要实时更新的应用场景(如聊天应用、实时数据监控等)非常有用。(服务端单向传输客户端,长连接)

记得开心一点嘛的博客 1万+

c oracle 返回行数,ORACLE PROC开发(2)

7.sqlda动态SQL预备知识(1).sqlda的引用EXEC SQL INCLUDE sqlda;sqlda *bind_dp;bind_dp = sqlald( … );(2).sqlald函数sqlald函数为sqlda结构分配空间。函数格式如下:descriptor_name = sqlald(max_vars, max_name, max_ind_name );其中:max_vars:...

weixin_33281416的博客 494

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2386

嵌入式SQL和事务

<br />   可能用到的头文件<br />#include <stdio.h><br />#include <string.h><br />#include <stdlib.h><br />#include <time.h><br />#include <math.h><br />#include <ctype.h><br />#include <sqlda.h><br />#include <sqlcpr.h><br />#include <userlog.h><br />#include <stda

天天学习的专栏 1631

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 592

Oracle proc环境怎么搭建

Oracle官方文档:Oracle官方提供了详细的PROC开发文档和示例代码,可以查阅以获取更多信息和帮助。安装Oracle数据库:确保已安装Oracle数据库,并配置好相应的环境变量,如ORACLE_HOME。作用:通过PROC,开发者可以在C语言程序中直接操作Oracle数据库,实现数据库访问和操作的功能。编译PROC程序:使用Oracle PROC预编译器编译PROC程序,生成C语言源代码文件(.c)。定义:Oracle PROC是Oracle的预编译器,用于将SQL语句嵌入到C语言程序中。

codemami的博客 883

(王道408考研操作系统)第三章内存管理-第一节1:内存基础知识、程序编译运行原理

注意:本节内容和《计算机组成原理》“存储器”那一部分内容相关性很强,组成原理是从硬件角度,操作系统是从软件角度。因此如果没有学习过这部分的同学,强烈建议先看这一部分 王道计算机组成原理笔记 本文主要会涉及以下必要的内存知识 文章目录一:内存及其作用 一:内存及其作用 内存:内存又称之为主存。是一种硬件设备,作为CPU和硬盘的缓冲区,用于解决其速度不匹配的问题,提高整机性能。程序执行前需要放入内存才能运行 ...

快乐江湖的博客 2792

C#上位机之海康相机开发(SDK)实战教程

SDK的接口设计遵循“句柄-操作-释放”模式,掌握→→→的流程,就能完成基础开发;工业场景需重点关注稳定性:断连重连、内存管理、抗干扰(网口相机的IP设置、触发信号的可靠性);进阶功能(如图像处理、多相机同步)需结合视觉库(EmguCV)和硬件特性(GPIO触发),但前提是保证基础采集的稳定。建议新手先跑通SDK自带的C#示例,理解每个函数的作用,再逐步替换为自己的代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2193

oracle proc 定义宿主,oracle proc 编程基础及最小化案例

oracle proc 编程是在我的概念中是非常陌生的,学习了一天下来发现这东西真的好古老,但是依然健壮、稳定,其中间是编辑一个 .pc 的文件使用 proc 进行预处理,预处理后生成一个真正的.c文件,此时再由 gcc 去编译成一个可执行文件运行。因为 proc 涉及到的知识较多,我无法整理到几篇博文中就概述这些所涉及的知识,所以只能总结代码做好注释防止以后自己需要时忘记。如果有想进一步了解 p...

weixin_30661579的博客 481

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

oracle 11g pro c c 编程艺术

转载:http://blog.sina.com.cn/s/blog_6cc7e1e10100ylo3.html   PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。 // oracle数据库环境设置 [root@localhost test]# export ORACLE_BASE=/u01/app/or...

bei79的专栏 370

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Oracle Proc开发之Makefile的编写模板

Oracle的数据库开发中需要用到Proc,Proc就是嵌入式C 本文主要介绍的是Oracle数据库开发,Linux下Proc的Makefile示例: 1 .SUFFIXES: .c .o 2 3 CC=gcc 4 PROC=proc 5 6 PROCSRCS=oracle.pc 7 SRCS=$(PROCSRCS:.pc=.c) 8 OBJS=...

asdfghjkl978564的博客 242

proc除了能用于oracle开发_能不能用于mysql开发_ORACLE PROC开发(转载)

Proc也就是嵌入式C,与informix的ESQ/C有类似之处,本部分主要列出Proc与Esql的区别,相同部分请参见informix部分。1.数组功能Proc中支持使用宿主变量数组一次查询SELECT/插入INSERT多条记录。在某些情况下非常有用,但不具有移植性。2.sqlca通讯区结构structsqlca { charsqlcaid[8]; longsqlab...

weixin_42516490的博客 247

指定DoC ID对ES写入性能影响多大?控制变量测试与优化策略

在分布式存储与搜索引擎中,文档标识(DoC ID)的指定方式直接影响写入路径。自动生成ID走纯追加快路径,而指定ID需查重、管理版本号,并可能引发删除标记积累与段合并加剧,进而影响吞吐与延迟。理解这一原理对高并发写入场景的容量规划与性能调优至关重要,尤其在日志采集、业务数据同步和搜索更新等应用中。通过控制变量测试方法,可以量化指定DoC ID带来的性能开销,并据此制定索引设计、routing优化与段合并策略,在业务需求与写入性能之间取得平衡。

weixin_34216196的博客 425

Linux中Oracle 11g Proc*C开发环境搭建

使proc预编译命令可用: [karihou@bogon ~]$ cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and ...

S411636919的博客 370

Linux环境下proc的配置c/c++操作数据库简单示例

  在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1.对Linux的命令和脚本的使用不够熟练.2.对Linux的个文件夹的作用不够了解;(打算下次补充一篇这样的总结博客.)3.英文还是很差劲的我.好入真题.   由于我引进配置好了,不想在...

abhem4170的博客 220

数据库 Proc编程一

proc编程 嵌入式sql:sql写入到C语言程序中 proc编程头文件路径 app\xxx\product\11.2.0\dbhome_1\precomp\public proc编程要注意proc编译器也会使用gcc编译器中的头文件,所以需要在proc编译器中进行配置,加上系统的头文件路径 配置文件路径是:app\xxx\product\11.2.0\dbhome_1\pr...

weixin_30345055的博客 118

PROC SQL连接不同的数据库

此文章为转载, 出处不详 /******************************************************************* 功能:链接Sql Server数据库 参数说明: libname (在SaS映射的数据库名) Data Source (SQL Server主机地址) Initial Catalog (SQL Server...

dichen4074的博客 214

Oracle10G--PROC编程篇(Linux)

PROC编程相信在Linux下工作的朋友应该不陌生吧!下面就来具体介绍些Proc编程相关的东西,此文相对简单,请高手们绕行。 PROC编程篇 (此文仅供Oracle初学者参考只用) /********************************************** ** 文章名称:Oracle10G--PROC编程篇(Linux) ** 版权信息:可以任意转载,但要注明出处及...

tjmzgn 123

oracle c 教程,Oracle Pro C编程系列

Oracle Pro C编程系列 - 1 对Oracle编程进行了概述,给大家展示了第一个简单的Pro C的例子,非常易懂 http://www.boobooke.com/v/bbk1876 Oracle Pro C编程系列 - 2 对Pro C编程中的变量和变量转换进行了全面的阐述 http://www.boobooke.com/v/bbk1882 OraclOracle Pro C编程系列 -...

weixin_39759270的博客 263

oracle ProC编程

Pro*C/C++ windows编程 来源:phoenix.yuwen 2005-11-21[1]先建立一个winproc.pc文件在里面把和oracle数据库相关的操作写成类和函数预编译时注意:预编译设置项中要修改 CODE...

conglianchun9672的博客 131

ORACLE PROC开发(转载)

Proc也就是嵌入式C,与informix的ESQ/C有类似之处,本部分主要列出Proc与Esql的区别,相同部分请参见informix部分。 1.数组功能 Proc中支持使用宿主变量数组一次查询SELECT/插入INSERT多条记录。在某些情况下非常有用,但不具有移植性。 2.sqlca通讯区结构 structsqlca { charsqlcaid[8]; ...

weixin_30407613的博客 203

ProC连接Oracle

一段简单的ProC连接Oracle的代码. Code1intconnectDb()2{3EXECSQLBEGINDECLARESECTION;4charusername[20];5charpassword[20];6charconnect_string[20];7EXECSQL...

weixin_30402343的博客 138

Oracle Proc*c初步学习总结

  有了oracle环境后,开始在Linux下编写proc*c 初始例子一般都是一个连接到数据库的程序: #include <stdio.h>#include <string.h>#include <stdlib.h>#include "sqlca.h" EXEC SQL BEGIN DECLARE SECTION; char *uid = "scott/t...

weixin_34249678的博客 201
上一篇: 汇编程序调用c程序
下一篇: 程序运行时的内存分配--静态的,栈式的,和堆式的
expert2000
博客等级 码龄26年 31粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值