Oracle - объединить строки в качестве имени столбца - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь объединить строки, которые используются в качестве имен столбцов

Я хочу сделать что-то вроде:

Select someData as "ONE" || :someVariable) from sometable;

, где someVariable является переменной связывания, которая не работает внутри doubleцитаты.(Столбец должен иметь имя "ONE2018", если someVariable = 2018.)

Я пробовал его в одинарных кавычках и с функцией concat.Не работаетЕсть ли какой-нибудь способ сделать это?

РЕДАКТИРОВАТЬ: С вдохновением от ответа littlefoots я попытался

declare
  customVariable number(4);
  rc sys_refcursor;
begin
  open rc for 'select 1 as bla' || :customVariable || ' from dual';
  dbms_sql.return_result(rc);
 end;
/

, который действительно имеет вывод

   BLA2018
----------
         1

Я незнать, как поместить это в PreparedStatement, но если оно используется само по себе, оно работает и может помочь кому-то еще

1 Ответ

0 голосов
/ 20 ноября 2018

Пример, основанный на таблице Скотта EMP, которая содержит столбцы, имена которых начинаются с E: ENAME и EMPNO.

Вы передадите NAME или MPNO и получите результат.

SQL> create or replace function f_one (par_column_name in varchar2)
  2    return sys_refcursor
  3  is
  4    l_rc sys_refcursor;
  5    l_str varchar2(200);
  6  begin
  7    l_str := 'select e' || par_column_name || ' from emp where rownum < 3';
  8    open l_rc for l_str;
  9    return l_rc;
 10  end;
 11  /

Function created.

SQL> select f_one('mpno') from dual;

F_ONE('MPNO')
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

     EMPNO
----------
      7369
      7499


SQL> select f_one('name') from dual;

F_ONE('NAME')
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

ENAME
----------
SMITH
ALLEN


SQL>
...