(7) 动态定义语句
SQL语句分动态定义语句和静态定义语句两种:
(1) 静态定义语句:SQL语句事先编入PRO*C中,在经过预编译器编译之后形成目标程序*。BOJ,然后执行目标程序预即可。
(2) 动态定义语句:有些语句不能事先嵌入到PRO*C程序中,要根据程序运行情况,用户自己从输入设备上(如终端上)实时输入即将执行的SQL语句。
动态定义语句有:
l EXECUTE IMMEDIATE;
l PREPARE 与EXECUTE;
l PREPARE与FETCH 和 OPEN ;
l BIND与DEFINE DESCRIPTOR。
1. EXECUTE IMMEDIATE语句
此语句表示立即执行, 并且只向SQLCA返回执行结果,无其它信息。例如:
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR abcd[89];
VARCHAR deay[20];
EXEC SQL END DECLARE SECTION;
/** 输出字符串到abcd **/
EXEC SQL EXECUTE IMMEDIATE :abcd;
注意:
1) EXECUTE IMMEDIATE只能运行带一个参数的动态语句。其中,abcd是参数,不是关键字。
2) EXECUTE IMMEDIATE使用的先决条件是:SQL语句不能包含主变量;SQL语句不能是查询语句。
3) 可用任何主变量作为EXECUTE IMMEDIATE的参数;也可用字符串作为主变量。
2. PREPARE与EXECUTE语句
此语句表示“预编译/执行”。此语句能够预编译一次而执行多次。语法为:
EXEC SQL PREPARE 〈语句名〉FROM:主变量;
EXEC SQL EXECUTE〈语句名〉[USING:替换主变量];
PREPARE语句做两件事:
(1) 预编译SQL语句;
(2) 给出SQL语句的语句名。
注意:
l SQL语句不能是查询语句;
l PREPARE和EXECUTE可包含主变量;
l PREPARE不能多次执行。
例如:
#define USERNAME “SCOTT”
#define PASSWORD “TIGER”
#include
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
Char * username=USERNAME;
Char * password=PASSWORD;
VARCHAR sqlstmt[80];
Int emp_number;
VARCHAR emp_name[15];
VARCHAR job[50];
EXEC SQL END DECLARE SECTION;
Main()
{
EXEC SQL WHENEVER SQLERROR GOTO :sqlerror;
EXEC SQL CONNECT :username IDENTIFIED BY :password;
Sqlstmt.len=sprintf(sqlstmt.arr,”INSERT INTO EMP (EMPNO,ENAME,JOB,SAL)
VALUES(:V1,:V2,:V3,:V4)”);
Puts(sqlstmt.arr);
EXEC SQL PREPARE S FROM :sqlstmt;
For(;;)
{
printf(“\nenter employee number:”);
scanf(“%d”,&emp_number);
if (emp_number==0) break;
printf(“\nenter employee name:”);
scanf(“%s”,&emp_name.arr);
emp_name.len=strlen(emp_name.arr);
printf(“\nenter employee job:”);
scanf(“%s”,job.arr);
job.len=strlen(job.arr);
printf(“\nenter employee salary:”);
scanf(“%f”,&salary);
}
EXEC SQL EXECUTE S USING :emp_number,:emp_name,:job,:salary;
}
3. FETCH语句和OPEN语句
FETCH语句和OPEN语句这组动态语句是对游标进行操作的,其执行过程如下:
注意:
l SQL语句允许使用查询语句;
l SELECT子句中的列名不能动态改变,只能预置;
l WHERE和ORDER BY 子句可以动态改变条件。
一、 Pro*C的编译和运行
1. 先用ORACLE预编译器PROC对PRO*C程序进行预处理,该编译器将源程序中嵌入的SQL语言翻译成C语言,产生一个C语言编译器能直接编译的文件。生成文件的扩展名为 .C
2. 用C语言编译器CC 对扩展名为 .c的文件编译,产生目标码文件,其扩展名为 .o
3. 使用MAKE命令,连接目标码文件,生成可运行文件
例如: 对上面的example.pc进行编译运行
PROC iname=example.pc
CC example.c
MAKE EXE=example OBJS=”example.o”
example
分享到:
相关推荐
1. Pro*C简介:Pro*C是一种将SQL语句嵌入C程序中的开发工具,它允许开发者在C语言中直接使用SQL语句访问Oracle数据库。它是一种第三代语言嵌入式SQL工具,可以在Oracle数据库管理系统中使用。Pro*C程序可以执行...
在PRO*C程序中,C语言被视为宿主语言,而SQL语句中使用的C语言变量则被称为主变量。所有在SQL语句中使用的变量都需要在DECLARE节中进行声明。DECLARE节由`EXECSQL BEGIN DECLARE SECTION;`和`EXECSQLEND DECLARE ...
《精通PRO*C编程》这本书是针对Oracle数据库应用开发的一本专业指南,主要讲解如何使用PRO*C,Oracle提供的C语言预处理器,进行高效的数据库应用程序开发。PRO*C是Oracle Corporation为C程序员设计的一种工具,它...
**Pro*C**是一种由Oracle提供的C语言扩展,它允许开发者在C程序中直接嵌入SQL语句,并通过Oracle预编译器将其转换成标准C代码,从而实现数据库操作与业务逻辑的无缝集成。 #### 二、新特性介绍 - **ORACLE 9i ...
PRO*C(也称为预编译C)是一种允许在C程序中嵌入SQL语句的技术,它结合了C语言的强大功能与Oracle数据库的高效数据处理能力。本文主要探讨如何使用PRO*C进行高效的大规模数据导出。 #### 二、问题概述 假设有一个...
Pro*C 属于第三种方法,结合了过程化和非过程化语言的优点。 2. **Pro*C 程序结构** - **程序结构**:Pro*C 程序类似于 C 程序,由全局和局部变量、函数组成,但增加了 SQL 语句和 PL/SQL 块。其结构主要包括应用...
Pro*C/C++ Programmer’s Guide, 10g Release 2 (10.2)提供了详细的指导和示例,帮助开发者有效地使用C/C++与Oracle数据库进行交互。通过深入理解其提供的特性和最佳实践,可以显著提高应用程序的性能和稳定性。对于...
为了方便开发者使用C语言进行数据库操作,Oracle提供了Pro*C工具,它是一种预编译器,允许程序员将C语言与SQL语句无缝结合,创建高效的数据库应用程序。 1. Pro*C程序概述 Pro*C程序结合了C语言的过程化编程能力与...
Pro*C是一种基于C语言的嵌入式SQL语言,能够将SQL语句嵌入到C语言程序中,从而实现数据库操作。Pro*C的动态SQL方法是指在Pro*C程序中使用动态定义的SQL语句来实现数据库操作。这种方法可以根据不同的数据库和应用...
接着,使用 Pro*COBOL Precompiler 将 COBOL 代码转换为 C 代码,最后使用 C 编译器编译生成可执行文件。 三、Pro*COBOL Precompiler 的编程技巧 在使用 Pro*COBOL Precompiler 进行编程时,需要注意以下几点: *...
如果你的应用程序不需要与 Oracle 数据库交互,或者可以完全使用标准 C 库函数完成所有功能时,就没有必要使用 Pro*c/C++ 和 SQLLIB 库函数。 ##### 3.6.4 能在 Pro*c/C++ 程序中调用存储过程吗? 可以。在 Pro*c/...
使用Pro*C进行编程一般分为以下三个步骤: 1. **创建内嵌SQL的C源程序**:首先需要创建一个后缀名为`.pc`的文件,在这个文件中可以嵌入SQL语句。例如,`stu.pc`文件就是一个典型的示例。 2. **预编译**:使用Pro*C...
在Oracle 11g中,Pro*C/C++是一种用于开发高性能应用程序的语言环境,它允许开发者使用C或C++语言编写应用程序,并通过Oracle预编译器将SQL语句嵌入到这些应用程序中。 #### 二、Oracle Pro*C/C++编程基础 **2.1 ...
本文将详细介绍如何使用 PRO*C(一种 C 语言的扩展,允许开发者在 C 语言程序中直接嵌入 SQL 语句)来连接 Oracle 数据库,并通过一个具体的示例程序来演示整个过程。这个示例包括了环境配置、代码编写、编译以及...
在Pro*C中,可以通过相应的C语言类型映射来使用它。 3. **何时不使用Pro*C/C++和SQLLIB库函数**:当需要更高的性能或更复杂的逻辑时,可能会选择使用OCI或其他更高级的接口。 4. **能否在Pro*C/C++程序中调用...
- 内嵌 SQL 或 ORACLE 库函数的第三代语言:Pro*C 正属于这种方法,它在 C 语言中嵌入 SQL,实现了过程化和非过程化的融合。 2. Pro*C 程序结构: Pro*C 程序的结构类似于标准 C 程序,但包含 SQL 语句和 PL/SQL ...
#### 三、Oracle Pro*C/C++的主要组成部分 1. **预编译器**:用于解析包含SQL语句的源代码,并将其转换为标准的C/C++代码。 2. **运行时库**:包含了与Oracle数据库交互所需的动态链接库(DLL)。 3. **头文件和库...
#### 三、Pro*C/C++的特点 1. **集成性**:Pro*C/C++提供了强大的集成能力,使得开发者能够在C/C++代码中无缝地嵌入SQL语句,从而实现对Oracle数据库的操作。 2. **高性能**:由于Pro*C/C++直接利用了Oracle数据库...
3. **使用Pro*C的优势** - **灵活性**:Pro*C提供了C语言的编程灵活性,允许进行复杂的数据处理和逻辑控制。 - **效率**:通过预编译,SQL语句被转换为更高效的C代码,直接与Oracle数据库接口交互,提高执行速度。...
Pro*C/C++的处理流程主要包括三个步骤:预编译、编译和执行。首先,Pro*C/C++会将C/C++代码中的SQL语句提取出来,生成相应的SQL语句;然后,这些SQL语句将被编译成可执行的代码;最后,编译后的代码将被执行,实现了...