我正在尝试连接用作列名的字符串
我想做类似的事情:
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中,但是如果单独使用它,它会起作用,并且可能会帮助其他人
答案 0 :(得分:2)
基于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>