编译Proc程序 登录远程数据库服务器//转

来源:互联网 发布:medline数据库入口 编辑:程序博客网 时间:2024/05/11 12:41
 如何登录远程数据库服务器:
step one:首先修改tnsnames.ora
(具体路径可能跟我不一样)
windows下修改:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
Linux下  修改:/home/oracle/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

修改后内容如下(以我的linux虚拟机登录windows数据库为例):
# tnsnames.ora Network Configuration File: /home/db/oracle/app/oracle/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

BECDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = becdb)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
##这是新增的项
##其中查看SERVICE_NAME过程如下:
##在远程数据库服务器登录sqlplus执行:select instance_name from v$instance;
##其中teleora可以随便命名,是指数据库的命名
##HOST = IPAddress
##IPAddress地址是指远程数据库服务器的地址
##PORT可以随便指定,只要不被占用
teleora =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = zhang)
    )
  )

step two:
  在proc文件中的链接数据库的语句增加USING :"teleora" 关键字。其中"teleora"可以使用字符串变量替代
 
  EXEC SQL CONNECT :username IDENTIFIED BY :password USING :"teleora";
 
tips:记得开启远程数据库的服务 
如何编译proc程序
step one:将.pc文件预编译为.c
    [ecif@localhost zyctest]$ proc sample1.pc
    显示信息:
    Pro*C/C++: Release 10.2.0.1.0 - Production on Tue Apr 13 14:07:05 2010
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    System default option values taken from: /home/oracle/oracle/product/10.2.0/db_1/precomp/admin /pcscfg.cfg

step two:编译.c文件,生成目标文件
    gcc -L$ORACLE_HOME/precomp/public -I/home/oracle/oracle/product/10.2.0/db_1/precomp   /public/ -c sample1.c



    提示警告:
    sample1.c: In function `main':
    sample1.c:236: warning: return type of 'main' is not `int'

step three:链接目标文件,生成可执行程序
   gcc -L$ORACLE_HOME/lib -lclntsh -o sample1 sample1.o
    警告:
    sample1.o(.text+0x381): In function `main':
    : warning: the `gets' function is dangerous and should not be used.

step four:执行文件

    ./sample1