刚开始学Proc 不知道怎么回事。
PS:有没有高手帮忙解答下:Proc.exe编译时需要的那些参数具体是什么意思,或者帮忙提供一些资料。
不胜感谢,真的。  [email protected] 这是我的邮箱编译后报错:Pro*C/C++: Release 10.1.0.2.0 - Production on 星期二 3月 29 13:08:41 2011Copyright (c) 1982, 2004, Oracle.  All rights reserved.系统默认选项值取自于:  f:\Oracle\product\10.1.0\Client_2\precomp\admin\pcscfg.cfg错误发生在行0, 列0, 文件f:\Projects\ProcTest\ProcTest\test.pc
PCC-F-02390, 未遇到任何 EXEC SQL CONTEXT USE 语句源代码如下:#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* 包含SQL通讯区,它用于处理错误。*/
#include <sqlca.h>
void connect(); /* 连接到Oracle Server */
void disconnect(); /* 断开到Oracle Server的连接 */
void sql_error(char *); /* 处理错误句柄 */
void select(); /* 查询子程序 */
extern sqlglm(char *,int *,int *);
/* 主程序 */
void main()
{
    /* 安装错误处理句柄 */
    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle错误--\n");
    /* 连接到数据库 */
    connect();
    /* 执行查询 */
    select();
    /* 断开数据库连接 */
    disconnect();
}
/* 子程序 */
/* 连接子程序 connect() */
void connect()
{
    EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR username[10], password[10], server[10];
    EXEC SQL END DECLARE SECTION;
    /* 输入用户名、口令以及服务器名 */
    printf("\n输入用户名:");
    gets(username.arr);
    username.len=(unsigned short)strlen((char *)username.arr);
    printf("\n输入口令:");
    gets(password.arr);
    password.len=(unsigned short)strlen((char *)password.arr);
    rintf("\n输入服务器名:");
    gets(server.arr);
    server.len=(unsigned short)strlen((char *)server.arr);
    /* 连接到Oracle服务器上 */
    EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
    printf("\n以用户%s成功地连接到了服务器%s上!\n", username.arr, server.arr);
}
/* 断开连接子程序 disconnect() */
void disconnect()
{
    char temp;
    printf("\n是否在断开连接前提交所有事务? (Y/N)");
    scanf("%c", &temp);
    fflush(stdin);
    if(temp !='Y' && temp != 'y')
    {
        /* 回退事务,断开连接。 */
        EXEC SQL ROLLBACK WORK RELEASE;
        printf("\n回退事务,断开连接,退出程序!\n\n");
    }
    else
    {
        /* 提交事务,断开连接。 */
        EXEC SQL COMMIT WORK RELEASE;
        printf("\n提交事务,断开连接,退出程序!\n\n");
        xit(1);
    }
}
/* 查询子程序 select()
* 首先输入作家代码,然后查询作家姓名和工资。*/
void select()
{
    EXEC SQL BEGIN DECLARE SECTION;
    char author_code[8], name[10];
    float salary;
    short salary_ind;
    /*char  auths[12];*/
    EXEC SQL END DECLARE SECTION;
   // printf("\n输入作家代码: ");
   // gets(author_code);
   // /* 查询作家姓名和工资 */
   // /*EXEC SQL SELECT name, salary INTO:name, :salary:salary_ind FROM auths WHERE author_code = :author_code;*/
   // /*EXEC SQL SELECT name INTO :name FROM auths WHERE author_code = :author_code;*/
   //* EXEC SQL SELECT name, salary INTO :name, :salary :salary_ind FROM cssweb_test WHERE author_code = :author_code;*/
   // EXEC SQL SELECT id INTO :salary FROM cssweb_test;
   // /* 根据指示变量的值来确定该作家的工资是否为空。*/
   // if (salary_ind ==0)
   // {
   //     printf("\n作家代码\t作家姓名\t作家工资\n");
   //     printf("--------\t--------\t--------\n");
   //     printf("%8s\t%8s\t%8.2f\n", author_code, name, salary);
   // }
   // else
   // {
   //     printf("作家%s的工资未录入,为空值!\n", name);
   // }
}
/* 错误处理子程序 sql_error() */
void sql_error(char *msg)
{
    char err_msg[128];
    size_t buf_len, msg_len;
    /* 出现SQL错误,继续往下执行。 */
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    printf("\n%s\n", msg);
    buf_len=sizeof(err_msg);
    /* 调用函数sqlglm()获得错误消息。 */
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s\n", msg_len, err_msg);
    /* 回退事务,断开连接,退出程序。 */
    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_FAILURE);