| Display the range wise column names [message #641741] |
Fri, 21 August 2015 07:24  |
grpatwari
Messages: 288 Registered: June 2008 Location: Hyderabad
|
Senior Member |
|
|
Hi,
I have one requirement in my assignment.
In the database, one of the table contains around 200 columns. I would like to display the range of columns in the query.
For example: Display the columns from 3 to 20 --> display the output from 3rd column to 20th column.
I can provide any range in the query.
Please advice on this.
|
|
|
|
|
|
| Re: Display the range wise column names [message #641743 is a reply to message #641742] |
Fri, 21 August 2015 08:01   |
cookiemonster
Messages: 13975 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
You need either
a) dynamic SQL (execute immediate, dbms_sql or ref cursor)
b) Front end code in whatever language that constructs a select statement on the fly with the correct column list (so dynamic SQL outside the DB).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Re: Display the range wise column names [message #642548 is a reply to message #641816] |
Mon, 14 September 2015 05:46   |
 |
aspire
Messages: 18 Registered: September 2015 Location: TVN
|
Junior Member |
|
|
As of my knowledge i have created one procedure, that will help to return values dynamically...
Just pass table_name ,rows from&to, column from&to
create or replace PROCEDURE PRC_BALA(LV_rEF OUT SYS_REFCURSOR,LV_TABLE_NAME VARCHAR2,ROWS_FROM NUMBER,ROWS_TO NUMBER,COL_RANGE_FROM NUMBER,COL_RANGE_TO NUMBER) IS
LV_QUERY VARCHAR2(9000);
COLUMN_NM VARCHAR2(2000) :=NULL;
ORG_COLUMN_NM VARCHAR2(2000) :=NULL;
CURSOR C1 IS SELECT COLUMN_NAME,ROWNUM,ROWNO
FROM (
SELECT COLUMN_NAME,ROWNUM,ROW_NUMBER() OVER(ORDER BY COLUMN_NAME) ROWNO
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME=UPPER(LV_TABLE_NAME)
ORDER BY COLUMN_NAME ASC)
WHERE ROWNO BETWEEN COL_RANGE_FROM AND COL_RANGE_TO;
BEGIN
FOR I IN C1 LOOP
COLUMN_NM :=COLUMN_NM||','||I.COLUMN_NAME ;
END LOOP;
ORG_COLUMN_NM := SUBSTR(COLUMN_NM,2)||',';
LV_QUERY := 'SELECT '||ORG_COLUMN_NM||' ROWNO FROM (
SELECT '||ORG_COLUMN_NM||' ROW_NUMBER() OVER(ORDER BY ROWNUM) ROWNO FROM '||LV_TABLE_NAME ||') WHERE ROWNO BETWEEN '||ROWS_FROM||' AND '||ROWS_TO;
OPEN LV_rEF FOR LV_QUERY;
END;
|
|
|
|
|
|
| Re: Display the range wise column names [message #642550 is a reply to message #642549] |
Mon, 14 September 2015 06:12   |
 |
aspire
Messages: 18 Registered: September 2015 Location: TVN
|
Junior Member |
|
|
create or replace PROCEDURE PRC_BALA(LV_rEF OUT SYS_REFCURSOR,LV_TABLE_NAME VARCHAR2,COL_RANGE_FROM NUMBER,COL_RANGE_TO NUMBER) IS
LV_QUERY VARCHAR2(9000);
COLUMN_NM VARCHAR2(2000) :=NULL;
ORG_COLUMN_NM VARCHAR2(2000) :=NULL;
CURSOR C1 IS SELECT COLUMN_NAME,ROWNO
FROM (
SELECT COLUMN_NAME,ROW_NUMBER() OVER(ORDER BY COLUMN_NAME) ROWNO
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME=UPPER(LV_TABLE_NAME)
)
WHERE ROWNO BETWEEN COL_RANGE_FROM AND COL_RANGE_TO;
BEGIN
FOR I IN C1 LOOP
COLUMN_NM :=COLUMN_NM||','||I.COLUMN_NAME ;
END LOOP;
ORG_COLUMN_NM := SUBSTR(COLUMN_NM,2);
LV_QUERY := 'SELECT '||ORG_COLUMN_NM||' FROM (
SELECT '||ORG_COLUMN_NM||' FROM '||LV_TABLE_NAME ||')';
OPEN LV_rEF FOR LV_QUERY;
END;
[Updated on: Mon, 14 September 2015 06:15] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|