我试图连接用作列名的字符串
我想做的事情如下:
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,但如果在它自己使用它可以工作,可能会帮助别人
一个基于Scott的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>