SQL游标在不知道表描述的情况下获取数据

SQL游标在不知道表描述的情况下获取数据,sql,cursor,Sql,Cursor,我正在编写一个Pro*C函数,它将接受表名并返回存储在其中的值 select * from <table_name> 在上面的代码中,我们需要表描述,这样我们就可以使用如下语句 emp_rec.first_name emp_rec.last_name 假设我们不知道表的描述,那么如何从游标中获取值 有可能吗?为了实现上述目标,我为Pro*C开发了一个API,它有几个函数和内置类,使使用Pro*C进行DB交互非常容易。看 示例代码: int main() { SQL

我正在编写一个Pro*C函数,它将接受表名并返回存储在其中的值

select * from <table_name>
在上面的代码中,我们需要表描述,这样我们就可以使用如下语句

emp_rec.first_name
emp_rec.last_name
假设我们不知道表的描述,那么如何从游标中获取值


有可能吗?

为了实现上述目标,我为Pro*C开发了一个API,它有几个函数和内置类,使使用Pro*C进行DB交互非常容易。看

示例代码:

 int main()
 {
      SQLHelper DB("username","password");
      vector< vector<string> > rowData;
      try
      {
           DB.openDB(); //connect to oracle database
           if(DB.checkDBStatus())  //if connected to database or not
           {
                cout<<"connected"<<endl;
           }
           rowData=DB.selectDB("select to_char(sysdate) from dual"); //fetch all rows in rowData
           if(rowData.size()>0) //to check if rows are fetched or not
           {
                for(int i=0;i<rowData.size();i++) //access each row
                {
                     for(int j=0;j<rowData.at(i).size();j++) //access each column
                     {
                          cout<<rowData.at(i).at(j);
                     }
                     cout<<endl;
                }
           }
           else
           {
                cout<<"No rows fetched"<<endl;
           }
      }
      catch(SQLHelperException sqlExp) //catch any exception during SQL execution
      {
           cout<<sqlExp.getExceptionString()<<endl;
      }
      return 0;
 }

这就是我们如何在不知道表的描述的情况下检索任何表。

您能更好地解释一下您想要的是什么吗?。在不知道表描述的情况下从任意表中选择,看起来您想要一个SELECT*,但我猜这不是您想要的want@Lamak:请查看编辑。动态SQL可以处理它。这是对sys表的选择,以获取列名,将它们加载到游标中,并在其中循环以生成SQL。是的,这是一个用来构建游标的游标。动态SQL带来了一些安全问题,老实说,我的第一反应是找到一个基于集合的解决方案,不要使用游标。@12th:先生,请您详细说明一下。。。我不明白。嗯……你改变了你的问题,所以我的答案不再有意义。您可以从syscolumns中选择列名,从syscolumns中选择名称,在sysobjects中选择id,其中名称='table1',并使用这些结果在变量中构建sql语句。这很痛苦,很难排除故障。我讨厌这么说……如果SQL是一辆高性能的汽车,那么使用光标就是下车和推。我想你可以,但你为什么要呢?
 int main()
 {
      SQLHelper DB("username","password");
      vector< vector<string> > rowData;
      try
      {
           DB.openDB(); //connect to oracle database
           if(DB.checkDBStatus())  //if connected to database or not
           {
                cout<<"connected"<<endl;
           }
           rowData=DB.selectDB("select to_char(sysdate) from dual"); //fetch all rows in rowData
           if(rowData.size()>0) //to check if rows are fetched or not
           {
                for(int i=0;i<rowData.size();i++) //access each row
                {
                     for(int j=0;j<rowData.at(i).size();j++) //access each column
                     {
                          cout<<rowData.at(i).at(j);
                     }
                     cout<<endl;
                }
           }
           else
           {
                cout<<"No rows fetched"<<endl;
           }
      }
      catch(SQLHelperException sqlExp) //catch any exception during SQL execution
      {
           cout<<sqlExp.getExceptionString()<<endl;
      }
      return 0;
 }