仅获取Oracle函数返回表的列及其类型

时间:2015-06-15 11:39:48

标签: c# oracle

是否有一个oracle查询,我可以用它来获取返回表的oracle函数的详细信息,我在那里查找该表的信息,比如记录名称,但主要是列中的该记录及其类型。

示例功能:

create or replace
function return_table return t_nested_table AS

v_ret   t_nested_table;

begin
  v_ret  := t_nested_table();

  v_ret.extend;
  v_ret(v_ret.count) := t_col(1, 'one');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(2, 'two');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(3, 'three');

  return v_ret;
end return_table;

使用类型

create or replace
type t_col as object (
  i number,
  n varchar2(30)
);
create or replace
type t_nested_table as table of t_col;

只知道所有者(系统)和对象名称(return_table),我想执行一个查询,它将返回t_col的信息。 列的名称(i,n)和类型(数字,varchar2)

我不能单独执行查询,因为可能存在这样一种情况,即在我尝试仅获取该功能时,该功能需要输入。栏目信息

我将在C#.Net

中执行此查询

1 个答案:

答案 0 :(得分:1)

对于当前登录,请使用

SELECT uta.attr_name, uta.attr_type_name || CASE WHEN uta.length IS NOT NULL THEN '('||uta.length||')' ELSE NULL END 
  FROM user_coll_types uct
  JOIN user_type_attrs uta 
    ON uta.type_name = uct.elem_type_name
 WHERE uct.type_name = 'COLLECTION_NAME'
 ORDER BY uta.attr_no;

对于有权访问其他用户类型的登录用户:

SELECT ata.attr_name, ata.attr_type_name || CASE WHEN ata.length IS NOT NULL THEN '('||ata.length||')' ELSE NULL END 
  FROM all_coll_types act
  JOIN all_type_attrs ata 
    ON ata.type_name = act.elem_type_name AND ata.OWNER = act.OWNER
 WHERE act.type_name = 'COLLECTION_NAME'
   AND act.OWNER = 'OWNER_NAME'
 ORDER BY ata.attr_no;

对于整个数据库中存在的类型(需要具有特殊权限):

SELECT dta.attr_name, dta.attr_type_name || CASE WHEN dta.length IS NOT NULL THEN '('||dta.length||')' ELSE NULL END 
  FROM dba_coll_types dct
  JOIN dba_type_attrs dta 
    ON dta.type_name = dct.elem_type_name AND dta.OWNER = dct.OWNER
 WHERE dct.type_name = 'COLLECTION_NAME'
   AND dct.OWNER = 'OWNER_NAME'
 ORDER BY dta.attr_no;