簡體   English   中英

從Oracle SQL中提供的查詢中獲取列名或別名

[英]Get column or alias name from a provided query in Oracle sql

例如,我有一個SQL查詢

SELECT * 
FROM EMPLOYEE 
INNER JOIN DEPARTMENT 
ON EMPLOYEE.DEP_ID = DEPARTMENT.DEP_ID

現在,我想獲取返回結果的所有列名稱:DEP_ID,EMP_ID,.....

我正在開發一個像http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all的j2ee網站,您可以在其中輸入sql查詢並獲取結果表

有一種使用dbms_sql.describe_columns2來獲取查詢的所有列名的方法。 但是,必須在PL / SQL中完成。

例如,

我想獲取以下SQL的所有列的列表:

SELECT emp.empno, emp.ename, dept.deptno 
FROM emp 
INNER JOIN dept 
ON emp.deptno = dept.deptno

以下匿名塊將按照它們在選擇列表中的確切順序列出所有列名

SQL> set serveroutput on
SQL> DECLARE
  2    l_cursor NUMBER := dbms_sql.open_cursor;
  3    l_ignore NUMBER;
  4    l_desc dbms_sql.desc_tab2;
  5    l_cnt NUMBER;
  6  BEGIN
  7    dbms_sql.parse( l_cursor, 'SELECT emp.empno, emp.ename, dept.deptno
  8  FROM emp
  9  INNER JOIN dept
 10  ON emp.deptno = dept.deptno', dbms_sql.native );
 11    dbms_sql.describe_columns2( l_cursor, l_cnt, l_desc );
 12    FOR i IN 1 .. l_cnt
 13    LOOP
 14      dbms_output.put_line( 'Column ' || i || ' is "' || l_desc(i).col_name || '"' );
 15    END LOOP;
 16    dbms_sql.close_cursor( l_cursor );
 17  END;
 18  /
Column 1 is "EMPNO"
Column 2 is "ENAME"
Column 3 is "DEPTNO"

PL/SQL procedure successfully completed.

SQL>

它還會給你的列名和別名

SQL> DECLARE
  2    l_cursor NUMBER := dbms_sql.open_cursor;
  3    l_ignore NUMBER;
  4    l_desc dbms_sql.desc_tab2;
  5    l_cnt NUMBER;
  6  BEGIN
  7    dbms_sql.parse( l_cursor, 'SELECT emp.empno employee_id, emp.ename employee_name, dept.deptno department_no
  8  FROM emp
  9  INNER JOIN dept
 10  ON emp.deptno = dept.deptno', dbms_sql.native );
 11    dbms_sql.describe_columns2( l_cursor, l_cnt, l_desc );
 12    FOR i IN 1 .. l_cnt
 13    LOOP
 14      dbms_output.put_line( 'Column ' || i || ' is "' || l_desc(i).col_name || '"' );
 15    END LOOP;
 16    dbms_sql.close_cursor( l_cursor );
 17  END;
 18  /
Column 1 is "EMPLOYEE_ID"
Column 2 is "EMPLOYEE_NAME"
Column 3 is "DEPARTMENT_NO"

PL/SQL procedure successfully completed.

SQL>

由於使用的是SELECT * `,因此您還可以從[DBA | ALL | USER] _TAB_COLUMNS中列出列名:

SQL> SELECT column_name FROM user_tab_columns WHERE table_name IN ('EMP','DEPT');

COLUMN_NAME
--------------------------------------------------------------------------------
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
DEPTNO
DNAME
LOC

11 rows selected.

這僅在您使用SELECT *時才有效,否則您將需要使用匿名塊(如上所示)。

您可以查詢ALL_TAB_COLUMNS表以獲取EMPLOYEE表中的所有列

不確定是否要格式化這些文件,因此不確定要獲得的最終結果

若要控制列和值的對齊方式,您可能需要使用Dynamic SQL替換SELECT語句中的*,以控制返回列的順序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM