[英]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.