Oracle 12c - SQL字符串构建问题 [英] Oracle 12c - SQL string build issue
本文介绍了Oracle 12c - SQL字符串构建问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是前一个问题的后续操作:在Oracle 12c中动态构建select语句
This is a follow up to a previous question: Dynamically build select statement in Oracle 12c
我正在动态构建一个select语句,但在构建列别名时遇到问题。必须从MAIN_TABLE中检索列别名。请参阅<>下面的代码:
I am trying to build a select statement dynamically but having a problem building the column alias names. The column alias name must be retrieved from MAIN_TABLE. Please refer to the code inside <> below:
declare
upper_level number;
t_sql varchar2(1000);
t_sql_val varchar2(500);
l_sql varchar2(1000);
begin
--upper_level will always be given
select 3 into upper_level from dual;
--build the fixed string
l_sql:='SELECT ID,
Title,
Desc,
Type,';
for lvl in 1..upper_level
loop
--build the column names and alias names
t_sql:=t_sql||'TYPE_'||lvl||' <SELECT TYPE_'||lvl||' FROM MAIN_TABLE WHERE ID = 1>,';
end loop;
--finish building the statement
t_sql:=rtrim(t_sql,',');
l_sql:=l_sql||t_sql;
l_sql:=l_sql||' FROM SCHEMA.TABLE
WHERE ID = 1;';
--dbms_output.put_line(l_sql);
end;
这是我的尝试:
declare
upper_level number;
t_sql varchar2(1000);
v_sql varchar2(1000);
v_sql_val varchar2(1000);
t_sql_val varchar2(500);
l_sql varchar2(1000);
begin
--upper_level will always be given
select 3 into upper_level from dual;
--build the fixed string
l_sql:='SELECT ID,
Title,
Desc,
Type,';
for lvl in 1..upper_level
loop
--build the column names and alias names
t_sql:='TYPE_'||lvl||;
v_sql:='SELECT '||t_sql||' FROM MAIN_TABLE WHERE ID=1';
EXECUTE IMMEDIATE v_sql into v_sql_val;
t_sql:=t_sql||' '||v_sql_val||',';
end loop;
--finish building the statement
t_sql:=rtrim(t_sql,',');
l_sql:=l_sql||t_sql;
l_sql:=l_sql||' FROM SCHEMA.TABLE
WHERE ID = 1;';
dbms_output.put_line(l_sql);
end;
我的尝试结果:
SELECT ID,
Title,
Desc,
Type,TYPE_3 LVL_3 FROM SCHEMA.TABLE
WHERE ID = 1;
我的预期结果:
SELECT ID,
Title,
Desc,
Type,TYPE_1 LVL_1, TYPE_2 LVL_2, TYPE_3 LVL_3 FROM SCHEMA.TABLE
WHERE ID = 1;
我该如何实现?
推荐答案
我已经弄清楚如何实现预期的结果:
I have figured out how to achieve expected result:
declare
upper_level number;
t_sql varchar2(1000);
v_sql varchar2(1000);
v_sql_val varchar2(1000);
t_sql_val varchar2(500);
l_sql varchar2(1000);
begin
--upper_level will always be given
select 3 into upper_level from dual;
--build the fixed string
l_sql:='SELECT ID,
Title,
Desc,
Type,';
for lvl in 1..upper_level
loop
--build the column names and alias names
t_sql:=t_sql||'TYPE_'||lvl||'_CD';
v_sql:='SELECT TYPE_'||lvl||'_CD FROM MAIN_TABLE WHERE ID=1';
EXECUTE IMMEDIATE v_sql into v_sql_val;
t_sql:=t_sql||' '||v_sql_val||',';
end loop;
--finish building the statement
t_sql:=rtrim(t_sql,',');
l_sql:=l_sql||t_sql;
l_sql:=l_sql||' FROM SCHEMA.TABLE
WHERE ID = 1;';
dbms_output.put_line(l_sql);
end;
这篇关于Oracle 12c - SQL字符串构建问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文