proc_oracle

#include<cstring>
exec sql include sqlca;

exec sql begin declare section;
char userpwd[30];
struct MatchedLogRec
{
    char logname[32];
    int pid;
    int logintime;
    int logouttime;
    int durations;/*在线时间*/
    char logip[257];
    /*服务器ip*/
    char serverip[20];
}pmlog;
char usedb = "db26";
exec sql end declare section;

void LogDao::connectDb(char* userp)
{
    strcpy(userpwd,userp);
    exec sql connect:userpwd using:usedb;
}
void LogDao::saveData(MatchedLogRec mlog)
{
    memcpy(&pmlog,&mlog,sizeof mlog);
    pmlog = mlog;
    exec sql insert into zxc_dmslog values(:pmlog);
}
void LogDao::commit()
{
    exec sql commit;
}
void LogDao::disConnect()
{
    exec sql commit work release;
}
//C方式编译pc文件:
# proc xx.pc
# gcc xx.c -lclntsh
# ./a.out
//C++方式编译pc文件:
# proc second.pc oname=second.cpp parse=none code=cpp (oname 输入文件名,parse 解析方式,cpp方式)

常见错误:
当创建表的时候,每个字段用“,”分隔,最后一个字段后不要放“,”

连接远程数据库
在linux下 需要做网络配置 (tnsnames.ora文件),相关的配置文件listener.ora、sqlnet.ora、tnsnames.ora,都是放在 $ORACLE_HOME\network\admin 目录下
1、sqlnet.ora –作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串
例如我们客户端入
sqlplus sys/oracle@orcl
假如我的sqlnet.ora是下面这个样子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去 解析它的 ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例
如果是下面这个样子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从tnsnames.ora查找orcl的记录,括号中还有其他选项,如LDAP等并不常用
2、Tnsnames.ora –这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件

PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改
HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机   器一般也是指数据库所在的机器
PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl     status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样

SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name (或select instance_name from v$ins tance;)命令察看

#你所要连接的时候输入得TNSNAME 
orcl = 
(DESCRIPTION =
(ADDRESS_LIST =
#下面是这个TNSNAME对应的主机,端口,协议 
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))
(CONNECT_DATA =
#使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节 
(SERVER = DEDICATED)
#对应service_name
(SERVICE_NAME = orcl)  

3、listener.ora——listener监听器进程的配置文件,接受远程对数据库的接入申请并转交给oracle的服务器进程

Oracle包括三种数据类型:
1)数值:number或number(p,s)
p:精度,s:刻度(小数位数)
1234.567 number(6,2) ——–> 1234.57
0.001234 number(2,4) ——–> 0.0012
1234 number(3,-1)——–> 1230
1204 number(3) ——–> 超出精度
2)字符:char, varchar, varchar2
char与varchar的区别:
1.内容存储时占用的存储空间;
定长:char (声明固定长度)
‘a’ -> char(10) -> 10
‘ab’ -> char(10) -> 10
变长:varchar (根据实际存储的长度为准)
‘a’ -> varchar(10) -> 1
‘ab’ -> varchar(10) -> 2
2.所允许存储的最大长度;
char: 2000
varchar: 4000
varchar与varchar2的区别:
1.制定厂商不同:
varchar:ANSI
varchar2:Oracle
2.承诺不同;
3)日期:date ‘01-JAN-08’

4、用proc插入固定格式时间
to_date(to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’),’yyyy-mm-dd hh24:mi:ss’)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值