oracle proc 開發環境

mrhaozi發表於2009-12-10
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[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16396910/viewspace-1029547/,如需轉載,請註明出處,否則將追究法律責任。

相關文章