pro*c可以把表名当作参数传入函数,然后在函数中使用DML语句吗?

int readFieldFromTable(char *table,char *primaryfield,int key,char *field, char *val)
{
      EXEC SQL SELECT :field INTO :val where :primaryfield=:key;
     .....
}类似如上形式,该如何做???

解决方案 »

  1.   

    你用动态执行SQL啊
    EXEC   SQL  execute immediate 
      

  2.   

    用动态执行SQL啊
    EXEC   SQL execute immediate 
      

  3.   

    用动态执行SQL啊
    EXEC   SQL execute immediate 
      

  4.   

    用动态执行SQL啊
    EXEC   SQL execute immediate 
      

  5.   

    估计要用动态sql吧,我们现在用的就是字符串拼的。我试过表明作为参数不行吧(我试过alter不行)
      

  6.   


    EXEC SQL BEGIN DECLARE SECTION;
    char sqlstr[1024];
    EXEC SQL END DECLARE SECTION;
    //...
    memset(sqlstr,0,sizeof(sqlstr));
    sprintf(sqlstr,"SELECT %s INTO :%s from %s where %s=%d",field,val,table,primaryfield,key);
    EXEC SQL execute immediate :sqlstr; 
    //...
      

  7.   

    如果自己知道查询语句只返回一定的值, 用6楼的方法是可行的;如果自己不知道,则不能这么用。
    应该用proc*c  动态3 或4的语句。安装Oracle时目录下有proc Example。我有个列子, 只是内存方面有问题, 想交流的话发邮箱:[email protected]