0

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

我想做类似的事情:

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

其中 someVariable 是绑定变量,在双引号内不起作用。"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 中,但如果单独使用它,它可以工作并且可能对其他人有所帮助

4

1 回答 1

2

一个基于 ScottEMP表的示例,其中包含名称以E:ENAME和开头的列EMPNO

你会通过NAMEorMPNO并得到结果。

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>
于 2018-11-20T18:48:31.807 回答