2010-12-28 3 views
0

생성 된 생성 된 열 이름에 대한 쿼리를 실행해야합니다.Oracle :이 쿼리를 실행하는 방법 (생성 된 열 이름)

select 'col_'||4 from MY_TABLE 

참고 :

  1. "4"자바 코드
  2. MY_TABLE 내에서이 쿼리에 전달되는 변수가 열을 포함하는 테이블입니다 여기에

    는 쿼리의 이름 (col_4, col_5 등)
+0

수를 증가하는 것은 당신이 실제로 실제로 DB 설계 –

+0

를 다시 생각하고 싶지 같은 소리 포함 된 열 이름과 테이블 그것은 이미 존재하는 테이블입니다. DB가 업데이트되면 어디서나 DBA가이를 다시 생성한다고 생각합니다. –

답변

3

오라클 내부에는 동적 SQL을 사용해야합니다. 단일 행 선택을 위해

: 당신이 어떤 SQL을 구축하고 동적 SELECT 문을 실행하려면 그들에게

+0

나는 그런 질문을하는 것이 매우 바보 같다고 생각한다. :) 나는 당신의 권고를 시험하고 답을 받아 들일 것이다. –

+0

이 문장은 실행된다. 그러나 선택한 데이터에 액세스 할 수 없습니다. – Codo

1

을 실행할 수있는 자바에서

EXECUTE IMMEDIATE ' select col_' || YourVariable || ' from MY_TABLE '; 

, 당신은 두 가지 선택이 (YourVariable 값은 예를 들어 4) 당신이 ... INTO EXECUTE IMMEDIATE를 사용 : 여러 행을 선택

EXECUTE IMMEDIATE 'select col_' || l_num || ' from MY_TABLE WHERE id = 37' INTO l_result; 

, 당신은 동적 커서를 사용할 수 있습니다

,
DECLARE 
    TYPE MyCurType IS REF CURSOR; 
    my_cv MyCurType; 
BEGIN 
    OPEN emp_cv FOR 'select col_' || l_num || ' from MY_TABLE'; 
    ... 
END; 
1

이 코드는 자신의 열 이름과 테이블을 반환하는 SELECT를 생성

SELECT 
'SELECT ' ||(
    SELECT 
     LISTAGG(
      c.TABLE_NAME || '.' || c.COLUMN_NAME || ' AS "' || c.TABLE_NAME || '.' || c.COLUMN_NAME || '"', 
      ', ' 
     ) WITHIN GROUP(
     ORDER BY 
      c.TABLE_NAME 
     ) "TABLE_NAMES" 
    FROM 
     USER_TAB_COLS c 
    WHERE 
     TABLE_NAME IN(
      'PESSOA', 
      'PESSOA_FISICA', 
      'PESSOA_JURIDICA' 
     ) 
)|| 'FROM PERSON;' 
FROM 
    DUAL; 
관련 문제