Oracle-将字符串连接为列名

时间:2018-11-20 11:33:53

标签: sql oracle sqlbindparameter

我正在尝试连接用作列名的字符串

我想做类似的事情:

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中,但是如果单独使用它,它会起作用,并且可能会帮助其他人

1 个答案:

答案 0 :(得分: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>