SQL游标获取数据而不知道表描述

时间:2013-09-04 21:48:47

标签: sql cursor

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

select * from <table_name>

现在我们从光标的基本编程知道的是:

DECLARE 
emp_rec emp_tbl%rowtype;
CURSOR emp_cur IS 
SELECT *
FROM 
WHERE salary > 10; 
 BEGIN 
    OPEN emp_cur; 
    FETCH emp_cur INTO emp_rec; 
     dbms_output.put_line (emp_rec.first_name || '  ' || emp_rec.last_name); 
   CLOSE emp_cur; 
END;

在上面的代码中我们需要table description,以便我们可以使用

之类的语句
emp_rec.first_name
emp_rec.last_name

假设我们不了解表的描述,那么我们如何从游标中获取值。

有可能。?

1 个答案:

答案 0 :(得分:0)

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

示例代码:

 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;
 }

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