工作需要,最近在学习Linux下proc连接oracle数据库的东西,下载了一份文档正在看,但是太慢,谁给一个Linux下proc连接oracle数据库的一个简单范例,要求能运行,包括环境的设置,范例中包含对某个表的一个简单操作,如增删改,谢谢!

解决方案 »

  1.   


    ----参考下吧
    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
    }
      

  2.   

    这个是连接数据库的
    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客户端的安装目录