给出一个查询sql 怎么获得其返回的列名及各列所在的表的名字第一个好做,一般封装数据库操作的类都会提供这个功能第二个怎么做呢 我平时都是用otl操作数据库的,可是otl没有提供实现这种功能函数不知道用oci接口能不能实现,实现起来复不复杂麻烦哪位对oci比较熟的大虾介绍介绍

解决方案 »

  1.   

    感谢1L大侠提供的oci操作示例但好像跟我的问题"给出一个查询sql 怎么获得其返回的列名及各列所在的表的名字 "不大相关有没有这方面的示例代码?
      

  2.   


    select table_name,column_name from user_tab_cols
      

  3.   

    ls的是获得指定表名中所有列举个例子,假如有个sql如下
    select a.DUMMY, b.DUMMY from dual a, dual b;
    如何知道
    第一列所在的表名(A)和第二列所在的表名(B)?
      

  4.   

    select a.DUMMY, b.DUMMY,table_name,column_name from dual a, dual b,user_tab_cols; 
      

  5.   

    select table_name from user_tab_cols where column_name='DUMMY'
      

  6.   

    需求就是运行程序,由用户输入一个sql,程序需要连接到指定的数据库判断合法是否能正常执行,并分析此sql
    返回如下
    sql列名 所在表
    列名1 表名1
    列名2 表名2
    ... ...举例,用户输入select a.DUMMY cola, b.DUMMY colb from dual a, dual b; 
    程序需要返回
    sql列名 所在表
    cola a
    colb b
      

  7.   

    判断合法非常简单,执行一下就可以。create or replace function is_valid_sql (p_sql varchar2) 
    return varchar2 is
      w_sql varchar2(32000);
      w_ret varchar2(10);
    begin
      w_sql := 'select 1 from dual where exists ('||p_sql||')';
      execute immediate w_sql into w_ret;
      return 'valid';
    exception when others then
      return 'invalid';
    end;
    /但是返回列和列所属的表在一般意义上是无法完成的。oracle select列表中不光是单纯的列名,还可以是别名、伪列、表达式、函数,比如
    select dummy as col_alias from dual;
    select rownum, rownum + 1 from dual;
    select sum(col1) from table1;
    from列后面也不光是表名,可以是任何合法的子查询,并可能是内存表,合并表(union, union all),比如
    select col1 from (select col1 from table1);
    select col1 from table1 union all select col2 from table2;
    select column_name from table (get_ids('1,2,3'));
    等等。如果你规定用户输入的sql只能是基本的列、表,不允许使用别名、伪列、表达式、函数等等,那还有一定的可能性。但那基本是对sql字符串进行分析,而不是oracle内部查询的问题了。