1. 环境变量
Ø 系统运行需要配置以下内容
ORACLE_SID=ORA8
NLS_LANG=American_America.zhs16cgb231280
ORA_NLS33=/home/oracle/ocommon/nls/admin/data
ORACLE_TERM=vt100
SHLIB_PATH=/home/oracle/lib
LD_LIBRARY_PATH=/home/oracle/lib:/usr/lib:.
ORACLE_HOME=/home/oracle
ORACLE_OWNER=oracle
NLS_DATE_FORMAT='YYYY/MM/DD'
Ø Oracle Shared Library: SHLIB_PATH $ORACLE_HOME/lib
说明:Oracle Shared Library在安装时自动建立,如有必要重建此库,可以Oracle 用户身份执行一下命令
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk client_sharedlib
Ø 日期格式的设置:有两种方法
(1).通过在给定的SQL启动中设置 alter session set NLS_DATE_FORMAT
(2).设置 INIT.ORA 中的 NLS_DATE_FORMAT 参数可设置缺省日期的格式
Ø 预编译选项:设置 PROCFLAGS='mode=ansi,def_sqlcode=true,parse=full,lines=true'
Ø 头文件:sqlca.h , oraca.h , sqlda.h
2. 移植注意事项:
Ø 对于 char 型数据的处理:
Informix 中用双引号括字符串,而。。。Oracle 中字符串用单引号 ’ 括起来,如用双引号 ” 则会出错(在Proc 中编译时不报错,运行时出错)
如果插入的字符串比字段定义的长度长,在 Informix 中会自动截掉多余的字符,而在 Oracle中会报错
在Oracel 中要使用 string 类型要采用如下的声明方式
char name[41];
EXEC SQL VAR name IS STRING(41);
Ø 头文件的使用:
由于 Oracle 不使用 EXEC SQL DEFINE 定义宏,故要用到这些东西的地方,只有改成用常量或变量。
3. 相关命令
Ø 查错用 oerr:命令格式 oerr ora err_num
Ø 查找标示符相关的库文件: symfind symname
4. proc 预编译设置
预编译选项 设置方式 缺省值 值域 说明
代码一致性 Mode=string Oracle ansi, iso, oracle
允许使用SQLCODE Def_sqlcode=boolean No yes, no,true, false
指定预编译源文件 Iname=string *none* *none*
指定预编译头文件路径 Include=string OR include=(string, …) ( *none*
指定系统头文件的路径 Sys_include=stringOR Sys_include=(string, …) ( *none*
预编译宏定义 define=string
预编译后的代码类型 Code=string Kr_c ansi_c, cpp,kr_c
指定与字符串数组,字符串对应的类型 Char_map=string Charz charz,varchar2,charf,string
指定连接数据库的字符串(username/password [@dbname]) Userid=string *none* *none*
指定 C 编译器支持的字符集 Comp_charset=string Multi_byte multi_byte,single_byte
数据库兼容模式(Oracle) Dbms=string Native v6, v6_char,v7, native, v8
事物相关参数 Duration=string Transaction session, transaction (设置object 在cache中的时间)
错误处理 Errors=boolean Yes yes, no,true, false (是否将错误信息发送到终端)
信息处理标准 Fips=string None none, sql89, sql2, yes, no
游标控制 Hold_cursor=boolean No yes, no,true, false (control holding of cursors in the cursor cache)
控制游标cache中的游标释放 Release_cursor=boolean No yes, no,true, false (control release of cursors from cursor cache)
Allow a NULL fetch without indicator variable Unsafe_null=boolean No yes, no,true, false
是否在产生的code 中加入行号(#line) Lines=boolean No yes, no,true, false
设置字符串长度 Maxliteral=number 1024 10-1024
可以被cache的打开的最大游标数目 Maxopencursors=number 10 *none*
语言支持 nls_char, nls_local
是否使用 ORACA Oraca=boolean No yes, no,true, false
控制是否解析 non-SQL CODE Parse=string Full full, partial,none
Control flagging of select errors Select_error=boolean Yes yes, no, true, false
预编译时对SQL代码的检查方式 Sqlcheck=string Syntax(语法) none, syntax,semantics(语义), full, limited(有限的)
是否支持多线程 Threads=boolean No yes, no, true, false
允许使用varchar 结构 Varchar=boolean No yes, no,true, false
5. 数据类型
Ø Oracle ProC 原始数据类型
C Datatype or Pseudotype Description
Char single character
char[n] n-character array (string)
Int Integer
Short small integer
long large integer
float floating-point number (usually single precision)
Double floating-point number (always double precision)
VARCHAR[n] variable-length string
Ø Oracle Internal Type ßà C Type ( ProC External Type
ORACLE Internal Type C Type(External Type)
VARCHAR2(Y)(Note 1) char
CHAR(X)(Note 1) char[n]VARCHAR[n]IntShortLongFloatDouble
NUMBER int
NUMBER(P,S)(Note 2) ShortLongFloatDoubleCharChar[n]VARCHAR[n]
DATE Char[n]VARCHAR[n]
LONG Char[n]VARCHAR[n]
RAW(X)(Note 1) Unsigned char[n]VARCHAR[n]
LONG RAW Unsigned char[n]VARCHAR[n]
ROWID Unsigned char[n]VARCHAR[n]
MLSLABEL Unsigned char[n]VARCHAR[n]
Notes:
1. X ranges from 1 to 255. 1 is the default value. Y ranges from 1 to 4000.
2. P ranges from 2 to 38. S ranges from -84 to 127.
Ø Informix Data Type ßàESQL/C Data Type ßà C Type
SQL Data Type ESQL/C Predefined Data Type C Language Type
BYTE loc_t
CHAR(n)CHARACTER(n) Fixchar array[n] orString array[n+1] char array[n + 1] or char *
DATE Date long int
DATETIME Datetime or dtime_t
DECIMAL(m,n)DECNUMERICMONEY(m,n) Decimal or dec_t
FLOATDOUBLE PRECISION Double
INTEGERINT 4-byte integer
INTERVAL Interval or intrvl_t
MULTISET(e) Collection
NCHAR(n) Fixchar array[n] orString array[n+1] char array[n + 1] or char *
NVARCHAR(m) Varchar[m+1] orString array[m+1] char array[m+1]
SERIAL 4-byte integer
SMALLFLOATREAL Float
SMALLINT 2-byte integer
TEXT loc_t
VARCHAR(m,x) Varchar[m+1] orString array[m+1] char array[m+1]
BLOB ifx_lo_t
BOOLEAN Boolean
CLOB ifx_lo_t
INT8 int8 or ifx_int8_t 8-byte integer
LIST(e) Collection
LVARCHAR Lvarchar Char
Opaque data type Lvarchar, fixed binary, orvar binary
ROW(...) Row
SERIAL8 int8 or ifx_int8_t 8-byte integer
SET(e) Collection
Ø Informix internal Type ßà C Type(External type Informixßà Oracle)ßà Oracle Intal Type
Informix Internal Type C Type(External Type) ORACLE Internal Type
Char(x) Char(x) Char(x), varchar2(x)
Integer Long NUMBER(9)
Smallint Short Int NUMBER(6)
Decimal Int, float, double NUMBER
Float Float NUMBER(18,4)
Serial Long NUMBER(11)
Date Char(11)àDATE DATE (/ NUMBER(10)
Money
DateTime Char(20) DATE
Interval
Varchar(1..255) Char(x) Char(x)
Text
Byte