----参考下吧 function GetTimeMargin#########format GetTimeMargin "$firsttime $secondtime"################## {sqlplus /nolog <<_EOF_ |grep "###" >tmp.ini connect $userid set serveroutput on ; set head off; set linesize off; declare v_result number(12); begin select abs(ceil((to_date('$1','yyyymmddhh24miss') - to_date('$2','yyyymmddhh24miss'))*1440)) into v_result from dual; dbms_output.put_line('###'||v_result); end ; / _EOF_echo `more tmp.ini|awk '{print substr($0,index($0,"###")+3,length($0)-index($0,"###")-2)}'` rm tmp.ini }
这个是连接数据库的 int sqlconnect(char* usr,char* passwd,char* serv) { EXEC SQL WHENEVER SQLERROR GOTO connecterr; if (serv==NULL) { EXEC SQL CONNECT :usr IDENTIFIED BY :passwd AT DB_NAME; } else { EXEC SQL CONNECT :usr IDENTIFIED BY :passwd AT DB_NAME USING :serv; } return 0; connecterr: return -1; }update 和 delete的可以直接写一个sql,存入sqlstat[](字符型数组)然后 sqloutdata * sqloracle(char* sqlstat) { SQLDA *selda; int i; sqloutdata *buf; EXEC SQL WHENEVER SQLERROR GOTO printerr; EXEC SQL WHENEVER NOT FOUND GOTO notfound; if (*sqlstat!='s' && *sqlstat!='S')//排除select { EXEC SQL AT DB_NAME EXECUTE IMMEDIATE :sqlstat; return 0; } printerr: return -1; notfound: return 100; }select 如果是固定字段的比较简单,如果是不定的比较麻烦,都需要游标的操作。编译 proc ****.pc 生成****.cgcc -o **** ****.c -I$(ORACLE_HOME)/precomp/public -L$(ORACLE_HOME)/lib -lclntsh $(ORACLE_HOME)是你的oracle客户端的安装目录
----参考下吧
function GetTimeMargin#########format GetTimeMargin "$firsttime $secondtime"##################
{sqlplus /nolog <<_EOF_ |grep "###" >tmp.ini
connect $userid
set serveroutput on ;
set head off;
set linesize off;
declare
v_result number(12);
begin
select abs(ceil((to_date('$1','yyyymmddhh24miss') - to_date('$2','yyyymmddhh24miss'))*1440))
into v_result from dual; dbms_output.put_line('###'||v_result);
end ;
/
_EOF_echo `more tmp.ini|awk '{print substr($0,index($0,"###")+3,length($0)-index($0,"###")-2)}'`
rm tmp.ini
}
int sqlconnect(char* usr,char* passwd,char* serv)
{
EXEC SQL WHENEVER SQLERROR GOTO connecterr;
if (serv==NULL)
{
EXEC SQL CONNECT :usr IDENTIFIED BY :passwd AT DB_NAME;
}
else
{
EXEC SQL CONNECT :usr IDENTIFIED BY :passwd AT DB_NAME USING :serv;
}
return 0;
connecterr:
return -1;
}update 和 delete的可以直接写一个sql,存入sqlstat[](字符型数组)然后
sqloutdata * sqloracle(char* sqlstat)
{
SQLDA *selda;
int i;
sqloutdata *buf;
EXEC SQL WHENEVER SQLERROR GOTO printerr;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
if (*sqlstat!='s' && *sqlstat!='S')//排除select
{
EXEC SQL AT DB_NAME EXECUTE IMMEDIATE :sqlstat;
return 0;
}
printerr:
return -1;
notfound:
return 100;
}select 如果是固定字段的比较简单,如果是不定的比较麻烦,都需要游标的操作。编译 proc ****.pc
生成****.cgcc -o **** ****.c -I$(ORACLE_HOME)/precomp/public -L$(ORACLE_HOME)/lib -lclntsh
$(ORACLE_HOME)是你的oracle客户端的安装目录