declare
cur INTEGER;
tab_description DBMS_SQL.DESC_TAB;
col_num NUMBER;
begin
--open a cursor
cur := dbms_sql.OPEN_CURSOR;
--parse your query
dbms_sql.PARSE(cur, 'select 1 a, 2 b, 3 c from dual', DBMS_SQL.NATIVE);
--now let dbms_sql describe your columns (col_num and tab_description are OUT Parameter)
dbms_sql.DESCRIBE_COLUMNS(cur, col_num, tab_description);
--close the cursor
dbms_sql.CLOSE_CURSOR(cur);
--number of columns in your Query
dbms_output.put_line(col_num);
--loop and print the column names
for i in 1..col_num loop
dbms_output.put_line(tab_description(i).col_name);
end loop;
end;
5条答案
按热度按时间dluptydi1#
可以吗?当然可以。您可以编写一个PL/SQL块,使用
dbms_sql
打开一个游标,使用针对dual
的实际查询,描述结果,将一个变量绑定到您发现的第二列是什么,从游标中提取,然后循环。这将是一个非常复杂的过程,通常相当痛苦,但它可以做到。SQL语言没有定义在静态SQL语句中执行此操作的方法,Oracle也没有提供允许此操作的扩展。不过,如果您知道自己想要第二列,但不知道该列表示什么,我更担心您试图解决的潜在问题。这在关系数据库中没有多大意义。
xeufq47z2#
不确定这是不是你需要的。
dbf7pr2w3#
如果你不知道名字,就给它起个好听的名字;).
7d7tgy0s4#
如果您知道子查询中的列数,则可以执行以下操作:
存在局限性:
db2dz4w85#
正如Justin Cave所说,没有内置的SQL方法来获取未知的列名,但可以通过PL/SQL来完成。下面是一个示例来演示Justin所说的方法。
您可以创建自己的PL/SQL函数来获取查询中所需的信息。有关详细信息,我建议您查看Oracle Docu。