比方说一条sql语句select a from b where c=d;        
最后a得结果是:
1
2
3
4
5
我如果用Pro*C来写这个程序的话 是select a into :e from b where c = :d; 那么最后我的变量e里面的值是什么样子的呢?
这个问题对于开发果pro*c得人来说应该不难,但是我总是想不通,希望大家能给我个能让我明白的答案,谢谢

解决方案 »

  1.   

    如果A的记录数>1,那么这句话就会出错,触发EXCEPTION TOO_MANY_ROWS.
    所以E什么都不是.
      

  2.   

    把e定义为一个数组,就可以了。给你一个例子,你就明白了。注意emp_name[20][20]和salary[10]。#include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sqlca.h>void sql_error(char *);
    extern sqlglm(char *,int *,int *); 
    void main()
    {
        EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR userid[20], password[20];
    char emp_name[20][20];
    float salary[10];
    int count;
        EXEC SQL END DECLARE SECTION;
    strcpy(userid.arr,"SCOTT");
    userid.len =strlen(userid.arr);
    strcpy(password.arr,"TIGER");
    password.len = strlen(password.arr);
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE--\n");
    EXEC SQL CONNECT :userid  IDENTIFIED BY :password;
    printf("Connection as ORACLE user: %s\n",userid.arr);
    EXEC SQL SELECT ename ,sal INTO :emp_name,:salary FROM emp 
    WHERE deptno = 20;
    for(count = 0; count<sqlca.sqlerrd[2];count++)
    printf("Employee name:%s,  salary: %6.2f\n", emp_name[count],salary[count]);
    EXEC SQL COMMIT WORK;

    EXEC SQL COMMIT WORK RELEASE;
    }
    void sql_error(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);
    }
      

  3.   

    星仔:正好要问的就是这个按照你定义的char emp_name[20][20];应该是一个二维数组亚,你在into emp_name的时候没有指定向那个位置传亚?还是那个定义就不是定义二维数组的?
      

  4.   

    是定义了一个二维数组,用于存储查询的多个结果的.不需要指定的.查询语句会把找到的多个结果值存入emp_name中,你试一下就知道了.