- 浏览: 5029499 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
动态SQL 在有些情况下, 在编码时SQL语句还不能完整地写出来, 而是在程序执行时才能构造出来(也就是说动态SQL语句在程序编译时语句的选择列表和确定, 变量数据大于0)。 这种在程序执行临时生成的SQL语句叫动态SQL语句. 利用动态SQL来编写Pro*C程序的方法叫动态SQL技术. 在下列情况之一不知道时, 使用动态SQL技术: a. SQL语句的文本. b. 宿主变量的个数。 c. 宿主变量的数据类型。 Oracle Pro*C 编程入门 d. 引用的数据库对象, 如列, 索引, 序列, 表, 用户名和视图. 实际上, 动态SQL在一般应用中用的相当普遍! Oracle中动态SQL可用以下两种方法实现: 一个是Oracle自己的方法, 一个是ANSI的方法. 一般建议使用Oracle的方法,但对于较复杂的应用, 可以使用ANSI的方法, 因为这样可以使自己的程序简化。 下面先说Oracle自己的方法. 5.1 Oracle方法 一般来说, 应该使用一个字符串变量来表示动态SQL语句的文本。 但该文本不包含“EXEC SQL”和分号“;”以及下列嵌入式SQL命令: ALLOCATE CLOSE DECLARE DESCRIBE EXECUTE FETCH FREE GET INCLUDE OPEN PREPARE SET WHENEVER 5.1.1 动态SQL语句的处理过程 动态SQL语句的处理过程如下: a. 构造动态SQL语句, 提示用户输入和构造一个动态SQL语句文本。 b. 分析该语句: Oracle对动态SQL语句文本进行语法检查, 并检查动态SQL语句所参照的数据库对象是否存在, 以及用户是否具有访问它所参照的对象的权限。 c. 为SQL语句结合宿主变量:在执行语句过程中, Oracle读取宿主变量地址, 并从这些变量中读取数据, 式将数据写入这此变量中。 d. 执行SQL语句, 实现数据库操作。 5.1.2 Oracle使用动态SQL的四种方法 Oracle提供了四种处理动态SQL的方法, 这四种方法从一到四依次变得复杂,从功能上说也是依次包含关系, 即前一种方法的功能可以完全由后一种方法实现。 用户可以根据每个任务的难易程度选择一种适合于自己的方法。 有关这四种方法的详细介绍请参考相关手册和DEMO程序. a. 方法一 这种方法只能执行非查询语句, 且在非查询动态SQL语句内不能包含输入宿主变量占位符。 这种方法使用EXECUTE IMMEDIATE命令立即执行动态SQL语句, 所以在每次执行时, Oracle需要对语句进行重新解释。 如: … <连接数据库> strcpy(str_sql,“DELETE FROM test001 WHERE name=’username’”); Oracle Pro*C 编程入门 EXEC SQL EXECUTE IMMEDIATE :str_sql; … b. 方法二 这种方法也只能用于执行非查询语句, 并且允许非查询动态SQL语句内包含输入宿主变量占位符, 但它要求在预编译时刻动态SQL语句内的占位符数量及输入宿主变量的数据类型必须确定。 ①. 准备阶段: 调用PREPARE语句准备需要执行的动态SQL语句, 这时Oracle对动态SQL语句进行语法分析, 检查它所参照的数据库对象等; ②. 执行阶段: 调用EXECUTE 命令执行准备好的动态SQL语句。 采用这种方式时, 动态SQL被准备好后可以被多次执行, 而不需要Oracle在 每次执行时重新解释SQL语句。 如: … <连接数据库> strcpy(str_sql,“INSERT INTO test001 values (:K1,:K2,:K3)”); EXEC SQL PREPARE test FROM :str_sql; EXEC SQL EXECUTE test USING :uname, :uaddress,:usex; … 占位符可以是随便给的一个字符, 单词等.它只起占位作用而没有实际意义. c. 方法三 这种方法可以执行包括查询语句在内的动态SQL语句, 但它要求在预编译时刻动态SQL语句内选择列表项数,输入宿主变量占位符数据以及输入宿主变量的数据类型必须确定。 方法三以游标方式执行动态SQL语句, 它对SQL语句的处理过程为: ①. 准执行PREPARE命令准备SQL语句; #实际就是把要执行的动态语句调入内存, 以 便以后对它进行操作。 ②. 执行DECLARE命令声明游标; ③. 执行OPEN打开游标; ④. 调用FETCH语句提取游标; ⑤. 调用CLOSE语句关闭游标。 动态SQL语句中的数据库对象名称和列名可以在运行时刻指定, 便此时不能以宿主变量形式指定对象名称或列名. 其实就是多了一个游标的使用。 如下面程序: <连接数据库>; strcpy(sql_stmt, "SELECT name, address, sex FROM test001"); EXEC SQL PREPARE select_stmt FROM :sql_stmt; EXEC SQL DECLARE c1 CURSOR FOR select_stmt; EXEC SQL OPEN c1; EXEC SQL WHENEVER NOT FOUND DO BREAK; while(1) Oracle Pro*C 编程入门 { EXEC SQL FETCH c1 INTO :Name, :address, :sex; printf("The name is: %s, The Address is: %s, The sex is :%s\n", Name, address, sex); } EXEC SQL CLOSE c1; d. 方法四 使用描述符方式处理动态SQL语句,它可以执行包括查询语句在内的所有动态SQL语句。 这种方式对动态SQL语句的限制最小, 它不要求在预编译时确定动动态SQL语句内的选择列表项数,库占位符数量以及宿主变量数据类型, 这些元素只要在运行时刻能够确定即可。 也就是说这种方法适合于在程序编译时对程序中的SQL语句还一无所知的情况。 方法四通过使用SQLDA结构代替宿主变量, 并通过调用DESCRIBE SELECT LIST或DESCRIBE BIND VARIABLES语句来检索选择列表项和结合变量(即宿主变量)描述信息, 从而使应用程序能够在运行时刻处理这种类型的动态SQL语句。 当SQLDA结构用于存列表信息项信息时, 它们被称做查询描述符; 当SQLDA结构用于存储结合变量信息时, 它们被称作结合描述符。 SQLDA结构的详细信息较长, 请参考相关书籍或手册。 这三种方法中前三种比较简单, 这里就不多说了, 方法四最为灵活, 功能最全, 但是也最为复杂. 使用方法共可分为以下18个步骤(请参考以下18个步骤去看例 程): ⑴. 在宿主变量声明区域声明字符串型宿主变量, 用它存储动态语句文本。 ⑵. 声明查询和结合描述符。 ⑶. 为查询和结合描述符分配内存空间; ⑷. 设置描述符能够最多描述的选择列表项和占位符数量; ⑸. 将动态语句文本拷贝到前面声明的宿主变量字符串中; ⑹. 调用PREPARE语句准备宿主变量字符串中的动态语句; ⑺. 为查询语句声明游标; ⑻. 描述结合变量,填充结合描述符; ⑼. 用DESCRIBE 语句所检索到的占位符实际数据(F)设置结合描述符中的占位符数据量, 即N元素; ⑽. 为DESCRIBE语句所检索到的结合变量分配内存, 并为各个结合变量提供数值; ⑾. 使用结合描述符打开游标; ⑿. 描述选择列表, 填充查询描述符; ⒀. 将查询描述符中的选择列表项数值设为DESCRIBE 语句所检索到的动态SQL语句中的实际选择列表项数; ⒁. 重新设置选择列有项的长度和数据类型; ⒂. 执行FETCH语句, 将数据库表中的数据提取到查询描述符所指向的数据缓冲区中; ⒃. 处理FETCH语句返回的选择列值; ⒄. 释放应用程序为选择列, 占位符, 指示符变量和描述符所申请的内存空 Oracle Pro*C 编程入门 5.2 ANSI方法 ANSI的方法如下: 5.2.1 使用ANSI方法的一些注意事项 Pro*C 应用程序的使用ANSI处理方法时, 必须将DYNAMIC 预编译选项值设置为 ANSI。 此外, 还需将TYPE_CODE选项设为ANSI。(这一点要十分注意, 因为这两 个选项不加会出现意想不到的错误,比如说: 如果不加TYPE_CODE, 程序一样可以 编译通过, 但是执行的结果却和你原来的的想法大相径庭) 5.2.2 ANSI方法和Oracle方法的不同 ANSI方法和Oracle方法相比有以下不同: ①. Oracle处理方法不支持对象类型, 游标变量, 结构数组, DML语句的RETURNING子句, 多字节字符变量 和LOB等,而ANSI处理方法支持所有的Oracle数据类型。 ②. ANSI处理方法所使用的描述符为C/C++结构变量, 它们由应用程序申请,释放和维护,而ANSI处理方法所使用的描述符则为SQL描述符, 它们由Oracle内部维护。 正是由于ANSI方法所使用的描述符是由Oracle内部维护, 所以ANSI方法比以上 方法四少了一些对于描述符的操作, 比如分配内存空间等。 5.2.3 ANSI处理方法对动态SQL语句的处理步骤 ANSI处理方法对动态SQL语句的处理步骤为: ⑴. 声明宿主变量, 包括动态SQL语句存储缓冲区; ⑵. 为输入,输出变量分配描述符; ⑶. 将动态语句文本拷贝到前面(1)中声明的宿主变量字符串中; ⑷. 调用PREPARE语句准备宿主变量字符串中的动态语句; #这一步实际上是对SQL语句进行语法分析, 检查 它所参照的数据库对象。 ⑸. 用DESCRIBE语句描述输入操作; #目的是读取动态SQL语句中的输入变量和输出变量等 描述信息,将它们存储到指定的输入描述符和输出描 述符中。 ⑹. 声明动态游标; ⑺. 用SET DESCRIPTOR 语句设置输出描述符; Oracle Pro*C 编程入门 ⑻. 打开游标; ⑼. 提取游标数据; ⑽. 处理所提取的游标数据; ⑾. 关闭游标; ⑿. 释放输入,输出描述符; 注意: 如果用ANSI方法处理非查询语句时, 就没必要申请输出描述符!以上所列的 步骤可根据各自的应用进行增删! 比如说, 像没有参数的delete, insert等语句的处理就可以简化为以下四步: a. 准备语句; b. 声明游标; c. 打开游标。 d. 关闭游标;
发表评论
-
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Otter(一)初识----简介和基本架构图
2017-10-11 11:23 1273tter 初识----简介和基本架构图 ... -
Canal+Otter - 前日篇(1)
2017-10-11 11:21 1193数据库同步中间件Canal+Otter - 前日篇(1) ... -
Otter-入门篇1(阿里开源项目Otter介绍)
2017-10-11 11:16 944Otter-入门篇1(阿里开源项目Otter介绍) ... -
Mysql几种索引类型的区别及适用情况
2017-09-30 16:27 581如大家所知道的,Mysql目前主要有以下几种索引类型:FUL ... -
唯一索引与主键索引的比较
2017-09-29 10:21 1469唯一索引唯一索引不 ... -
主键索引和唯一索引的区别
2017-09-29 10:05 651-- 区别 主键是一种约束,唯一索引是一种索引,两者 ... -
Index column size too large. The maximum column size is 767 bytes
2017-09-28 18:01 1881Index column size too large. T ... -
数据库死锁分析与解决
2017-08-17 10:00 859一、死锁的表现 1、 ... -
mysql,oracle,sql server中的默认事务隔离级别查看,更改
2017-08-09 13:44 1372未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的 ... -
Mycat跨分片Join
2017-08-02 11:26 8761 前言 Mycat目前版本支持跨分片的join,主要实现 ... -
Mycat 分布式事务的实现
2017-08-02 11:27 1368引言:Mycat已经成为了一个强大的开源分布式数据库 ... -
MyCat部署运行(Windows环境)与使用步骤详解
2017-08-02 10:20 8871、MyCat概念 1.1 总体架构 MyCAT的架 ... -
mycat 分片中快速数据迁移思考
2017-07-31 17:42 867操作实践背景: travelrecord表定义 ... -
Mycat水平拆分之十种分片规则
2017-07-31 16:43 872水平切分分片实现 配置schema.xml ... -
博客分类: DB-oracle sqlOracle 1、方式一:使用序列和触发器 Sql代码 收藏代码 SQL> CREATE SEQUENCE te
2017-07-22 09:01 507sqlOracle 1、方式一:使用 ... -
PL/SQL Developer连接本地Oracle 11g 64位数据库
2017-05-16 22:29 7071.登录PL/SQL Developer 这里省略Ora ... -
分库分表的几种常见形式以及可能遇到的难
2017-04-11 23:33 806在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表 ... -
MySQL 日志
2017-01-11 20:58 582概述 MySQL日志记录了MySQL服务器的各种行为,My ... -
undo log与redo log原理分析
2016-12-17 21:57 815数据库通常借助日志来 ...
相关推荐
Pro*C是一种基于C语言的嵌入式SQL语言,能够将SQL语句嵌入到C语言程序中,从而实现数据库操作。Pro*C的动态SQL方法是指在Pro*C程序中使用动态定义的SQL语句来实现数据库操作。这种方法可以根据不同的数据库和应用...
1. **高级Pro*C特性**:深入讲解Pro*C的高级特性,如动态SQL、批处理、并发控制等。 2. **性能优化**:介绍如何通过Pro*C优化数据库访问,包括索引策略、查询优化和内存管理。 3. **分布式处理**:探讨如何在Pro*C中...
Oracle Pro*C 是一种集成的开发工具,用于在C语言中嵌入SQL语句,以便高效地与Oracle数据库进行交互。这种技术将C语言的强大功能与SQL的数据库操作能力结合在一起,提供了一种灵活且高性能的方式来构建数据库应用...
1. Pro*C简介:Pro*C是一种将SQL语句嵌入C程序中的开发工具,它允许开发者在C语言中直接使用SQL语句访问Oracle数据库。它是一种第三代语言嵌入式SQL工具,可以在Oracle数据库管理系统中使用。Pro*C程序可以执行...
PRO*C为开发者提供了一种将SQL语句嵌入C语言程序的有效方式,使得开发者可以在保持C语言强大逻辑处理能力的同时,充分利用SQL语言进行高效的数据管理。通过了解PRO*C的基本概念、程序结构以及如何使用SQL语句,...
8. **动态SQL**:在Pro*C中,可以使用字符串拼接或者EXEC SQL EXECUTE IMMEDIATE语句执行动态SQL,这在处理灵活的查询需求时非常有用。 9. **存储过程和函数**:学习如何在C/C++中调用Oracle的存储过程和函数,以及...
Pro*C是Oracle公司开发的一种预编译器,它允许程序员在C语言中嵌入PL/SQL代码,使得C程序可以直接与Oracle数据库交互。通过Pro*C,开发者可以利用C语言的强大功能和效率,同时享受Oracle数据库提供的高级数据库操作...
Pro*C是Oracle客户端工具集的一部分,它将PL/SQL块转换为C/C++函数,使得开发者可以在C或C++程序中直接执行Oracle数据库的SQL和PL/SQL语句。这不仅提高了开发效率,也提供了更好的性能,因为数据库调用可以被优化。...
- **动态SQL**:允许在运行时构造和执行SQL语句,增强了程序的灵活性。 - **嵌入式PL/SQL**:除了SQL,还可以嵌入PL/SQL块,方便处理复杂的业务逻辑。 - **绑定变量**:使用绑定变量可以减少SQL注入的风险,并...
PRO*C是Oracle Corporation为C程序员设计的一种工具,它允许在C程序中嵌入SQL语句,使得C语言能够与Oracle数据库无缝集成。 一、PRO*C简介 PRO*C是Oracle数据库的C语言接口,它扩展了C语言,增加了对SQL和PL/SQL的...
7. **游标和动态SQL**:Pro*C/C++支持游标,可以用来遍历查询结果,也可以用于执行动态SQL。动态SQL允许在运行时构建SQL语句,增加了程序的灵活性。 8. **事务管理**:使用`EXEC SQL BEGIN WORK`、`EXEC SQL COMMIT...
Pro*C/C++ 是一种集成在C或C++编程语言中的预处理器,它允许程序员直接在源代码中嵌入PL/SQL语句,用于与Oracle数据库进行交互。这种编程方式提供了高效且灵活的数据库访问手段,特别适合于开发与Oracle数据库紧密...
在IT领域,PRO*C是Oracle公司提供的一种预编译器,它允许开发人员使用C语言来编写PL/SQL代码,从而更高效地与Oracle数据库进行交互。这个“PRO*C入门实例”可能是针对初学者的一个教程,通过一个实际的代码示例来...
- **动态链接库/静态库**:Java通过JNI调用的C代码需要打包成库文件,不同操作系统有不同格式的库文件,如Linux的`.so`和Windows的`.dll`。 - **Oracle的OCI(Oracle Call Interface)**:Oracle提供的C API,用于...
9. **带参动态SQL**:Pro*C允许使用动态SQL来构建和执行在运行时决定的SQL语句,这对于处理参数化查询非常有用。 10. **oci接口**:除了Pro*C,Oracle还提供了Oracle Call Interface (OCI),这是一种更底层的C接口...
Pro*C增删改查Oracle数据库中数据表的代码
- **EXEC SQL**:这是Pro*C中用于插入SQL语句的关键字,如`EXEC SQL SELECT ... INTO ...`用于执行查询并存储结果。 - **声明和使用游标**:通过`EXEC SQL DECLARE cursor_name CURSOR FOR ...`声明游标,`EXEC ...
Pro*C是Oracle公司提供的一种预编译器,它允许C/C++程序员直接在C或C++代码中嵌入SQL语句,从而实现与Oracle数据库的紧密交互。下面将详细阐述这一配置过程。 **1. 安装必要的组件** 首先,确保已经安装了以下组件...
**Pro*C**是一种由Oracle提供的C语言扩展,它允许开发者在C程序中直接嵌入SQL语句,并通过Oracle预编译器将其转换成标准C代码,从而实现数据库操作与业务逻辑的无缝集成。 #### 二、新特性介绍 - **ORACLE 9i ...
Pro*C是C语言与Oracle数据库的一种融合,它允许开发者将C语言的灵活性与SQL的数据库操作能力相结合,从而实现高效的数据处理。 文章首先介绍了Pro*C的主要特点和优势。其一,Pro*C的源代码由C语言和内嵌的SQL语句...