zoukankan      html  css  js  c++  java
  • Unix下Pro*c编译命令

    目 录
    Pro*C&C++
    Pro*c简单实例
    Unix下Pro*c编译命令
    什么是Pro*C&C++
    Pro*c中使用plsql获取多条记录
    Pro*C能支持什么

    --------------------------------------------------------------------------------


    Pro*C&C++


    [目录]

    --------------------------------------------------------------------------------


    Pro*c简单实例

    /*
    * filename:model.pc
    * author:alamo
    * inc:sinosoft
    * create time:2001.3.24
    * update time:
    * desc:it is a model file for write pro*c programe for oracle+tuxedo
    */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sqlda.h>
    #include <sqlcpr.h>
    #include <atmi.h>
    #include <fml.h>
    #include <userlog.h>

    /* set pro*c operation */
    exec sql include sqlca;
    exec sql include oraca;
    exec oracle option (oraca=yes);

    /* Define constants for VARCHAR lengths. */
    #define UNAME_LEN 20
    #define PWD_LEN 40

    /* Declare variables. No declare section is
    needed if MODE=ORACLE. */
    VARCHAR username[UNAME_LEN]; /* VARCHAR is an Oracle-supplied struct */
    varchar password[PWD_LEN]; /* varchar can be in lower case also. */

    /* Declare error handling function. */
    void sql_error(msg)
    char *msg;
    {
    char err_msg[128];
    size_t buf_len, msg_len;

    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s\n", msg);
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s\n", msg_len, err_msg);

    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_FAILURE);
    }

    void main()
    {

    /* Connect to ORACLE--
    * Copy the username into the VARCHAR.
    */
    strncpy((char *) username.arr, "sgac_dec", UNAME_LEN);

    /* Set the length component of the VARCHAR. */
    username.len =
    (unsigned short) strlen((char *) username.arr);

    /* Copy the password. */
    strncpy((char *) password.arr, "dbwork", PWD_LEN);
    password.len =
    (unsigned short) strlen((char *) password.arr);

    /* Register sql_error() as the error handler. */
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

    /* Connect to ORACLE. Program will call sql_error()
    * if an error occurs when connecting to the default database.
    */
    EXEC SQL CONNECT :username IDENTIFIED BY :password;

    printf("\nConnected to ORACLE as user: %s\n", username.arr);

    /* Disconnect from ORACLE. */
    EXEC SQL ROLLBACK WORK RELEASE;
    exit(EXIT_SUCCESS);
    }


    [目录]

    --------------------------------------------------------------------------------


    Unix下Pro*c编译命令

    #编译pc文件为c文件
    proc include= filename.pc
    #编译c文件,生成目标文件
    cc -I$ORACLE_HOME/precomp/public -c filename.o filename.c
    #连接目标文件,生成可执行程序
    cc -L$ORACLE_HOME/lib -lclntsh -o filename filename.o
    example
    #使用pl/sql块时必须设置sqlcheck
    rm model_exe.c
    proc include=${TUXDIR}/include model_exe.pc SQLCHECK=FULL userid=scott/tiger
    rm model_exe.o
    cc -I$ORACLE_HOME/precomp/public -I$TUXDIR/include -c model_exe.o model_exe.c
    rm model_exe
    cc -L$ORACLE_HOME/lib -lclntsh -o model_exe model_exe.o


    [目录]

    --------------------------------------------------------------------------------


    什么是Pro*C&C++

    Pro*C/C++预编译将嵌入在你的C和C++程序中的SQL语句转换成标准的C代码。预编译这些代码后,C和C++程序你可以编译和使用去构造应用和访问ORACLE数据库。
    去访问ORACLE数据库,你使用高级查询语言即SQL语言。Pro*C/C++是预编译器转换C语句中的EXEC SQL命令。
    ORACLE公司针对ORACLE数据库开发的一种SQL嵌入式开发语言。
    在C代码中嵌入SQL语言,C代码用宿主变量与SQL进行交换数据。
    预编译后生成标准C代码。


    [目录]

    --------------------------------------------------------------------------------


    Pro*c中使用plsql获取多条记录

    valueStr VARCHAR; // 接收查询结果的字符串,注意长度不能小于返回的结果字符的长度
    EXEC SQL EXECUTE
    DECLARE
    resultStr VARCHAR2(行长度*可能的最大行数) := ''; // 行长度要>=各字段长度之和
    BEGIN
    FOR cur1 IN(sql语句) LOOP // SQL语句中列的写法为 c1||'||'||c2... rowStr
    resultStr := resultStr||cur1.rowStr||'!!';
    END LOOP;
    if(length(resultStr) > 0) then -- 如果为空,出现PROC异常
    :valueStr := resultStr;
    end if;
    END;
    END-EXEC;

    例子:
    var x varchar2(4000);
    DECLARE
    resultStr varchar2(4000);
    begin
    for cur1 in(select deptno||dname||loc rowStr from dept) loop
    resultStr := resultStr||cur1.rowStr||'!!';
    end loop;
    :x := resultStr;
    end;
    /


    [目录]

    --------------------------------------------------------------------------------


    Pro*C能支持什么

    1.远程(通过NET8)或者本地访问ORACLE8服务器,版本8.0。
    2.可嵌入PL/SQL块。
    3.捆绑式数据库调用,在C/S环境下能够达到最好的性能。
    4.完全参照ANSI标准的SQL程序。
    5.PL/SQL过程中PL/SQL8.0版。
    6.多层应用。
    7.ANSI标准C。
    8.支持Microsoft Visual C++ 5.0版32位应用。
    9.支持Borland C++ 5.0版32位应用。

  • 相关阅读:
    MSSQLSERVER数据库 变量和批处理
    MSSQLSERVER数据库 事务
    MSSQLSERVER数据库 使用C#来操作事务
    MSSQLSERVER数据库 视图
    Delphi中DBGrid行列颜色设置
    C#中调用SQL存储过程(带输入输出参数的例子)
    用Visual C#调用Windows API函数
    c#日期时间的操作的函数总结[转]
    C# 序列化与反序列化
    利用C#事务处理对数据库进行多重操作
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400888.html
Copyright © 2011-2022 走看看