[计算机软件及应用]08 Proc程序设计2-1
PROC程序设计2-1 回顾 理解数据库设计的基本方法 掌握创建用户 分配权限 掌握序列 掌握oracle常用函数 本章目标 了解什么是PROC程序 理解PROC程序的编译过程 宿主变量的使用 什么是PROC程序 在高级语言(如C语言)中嵌入SQL语句以完成数据库操作这样的程序,我们称之为Pro*C程序。 那么这里的高级语言我们就称之为宿主语言, 宿主语言Pro程序 C/C++ Pro*C/C++ FORTRAN Pro*FORTRAN PASCALPro*PASCAL COBOLPro*COBOL PL/I Pro*PL/I Ada Pro*Ada ORACLE预编译程序proc C语言中嵌入了SQL语句,但是C语言的编译器并不能认识SQL语言的语法,为此,我们需要对Pro*C程序进行预编译成C源程序,然后再由C编译器编译成可执行程序。 Oracle预编译程序proc就是这样的一个编程工具,其主要功能是将C语言中嵌入的SQL语句转换成高质量的C语言源码。 PROC程序编译过程 一个PROC例子2-1 PROC程序组成 |--外部说明部分 |--C的外部变量说明 |--外部说明段 |--通讯区说明段 |--程序体 |--内部说明部 |--C的局部变量说明 |--内部说明段 |--通讯区说明 |--可执行语句 |--C的可执行语句 |--SQL的可执行语句或PL/SQL块 如何编译proc PROC INAME=filename [OptionName1=value1]…[OptionNameN=valueN] 常用预编译选项 INAME=path and filename (name of the input file) ONAME=path and filename (name of the output file) INCLUDE=path (头文件所在路径) ----INCLUDE=路径名 或 INCLUDE =(路径名1,路径名2…) PARSE=FULL | PARTIA | NONE (default FULL for C, Others for C++) CODE=ANSI_C | CPP (default ansi_c) USERID=username/password MODE=ANSI | ORACLE (ansi or oracle standard, oracle is default.) 如何编译proc proc预编译选项很多,我们可以把它们放到一个配置文件中,默认的配置文件是$ORACLE_HOME/precomp/admin/pcscfg.cfg,这个文件一开始是空的。也可以自己定义一个文件,编译的时候指定config选项 如:proc config=oracle.cfg db.pc 编译成可执行文件的时候,必须加上oracle的头文件和它的库文件 gcc -g -I$(ORACLE_HOME)/precomp/public/ -c db.c gcc -g -I$(ORACLE_HOME)/precomp/public/ $^ -o $@ -L$(ORACLE_HOME)/lib -lclntsh Oracle预处理的好处 直接使用SQLLIB函数调用,程序的可读性差,使用SQL语句可读性强,减轻了开发工作量,提高开发效率 预编译程序可以在预编译阶断检查SQL语句的正确性,将程序出错机率消灭在预编译期间。 预编译程序可以按照开发人员嵌入的SQL语句,组织最合理的Oracle接口函数调用。 连接数据库 EXEC SQL CONNECT { :user IDENTIFIED BY :pswd | :usr_psw } [ [ AT { dbname | :host_variable } ] USING :connect_string ] 连接本地数据库 本地: 客户应用程序与oracle server 在同一台机器上. 方式一:用户名口令由两个独立变量存储 char userName[20] = “scott”; Char userPwd[20] = “tiger”; EXEC SQL CONNECT :userName IDENTIFIED BY :userPwd; 方式二:用户名口令由单个变量存储 Char uname_pwd[40] = “scott/tiger”; EXEC SQL CONNECT :