Oracle - 将字符串连接为列名

问题描述 投票:0回答:1

我试图连接用作列名的字符串

我想做的事情如下:

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

其中someVariable是一个绑定变量,在双引号内不起作用。 (如果"ONE2018",该列的名称应为someVariable = 2018。)

我用单引号和concat函数尝试了它。它不起作用。有没有办法实现这个目标?

编辑:从小脚的答案的灵感我试过

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,但如果在它自己使用它可以工作,可能会帮助别人

sql oracle sqlbindparameter
1个回答
2
投票

一个基于Scott的EMP表的例子,其中包含名称以E开头的列:ENAMEEMPNO

你将通过NAMEMPNO获得结果。

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>
© www.soinside.com 2019 - 2024. All rights reserved.