因为项目需要,有一段select语句中的列,想实现可配置,因此就需要用for循环。但尝试之后发现select语句中是不允许放for循环的。
因此就有了本篇文章。仅是自己在做项目中的一点小心得。欢迎各位大神指正。
需求 select column1,column2,column3,column41,column42,column43,column44...... from table1 where [条件]。其中column41,column42,column43,column44......是想放在另一个表中维护的,因此这些列有可能会增加、减少、改变。
现在我们开始写这部分代码。
首先我们需要定义一个变量,来存放拼接好的SQL语句。
V_SQL_STR varchar2(30000);
接下来就是拼接语句:
V_SQL_STR:=CONCAT(V_SQL_STR,'SELECT ');
V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN1);
V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN2);
V_SQL_STR:=CONCAT(V_SQL_STR,COLUMN3);
--开始拼接Column41往后的列
OPEN TDCV FOR --打开游标
SELECT ITEM_CD
FROM table2
WHERE [条件];
FETCH TDCV BULK COLLECT INTO ITEM_CDS;
CLOSE TDCV;
IF ITEM_CDS.COUNT > 0
THEN
FOR I IN ITEM_CDS.FIRST .. ITEM_CDS.LAST
LOOP
V_SQL_STR :=CONCAT (V_SQL_STR,ITEM_CDS(I)); --将查出来的符合条件的列拼接到SQL语句中
END LOOP;
END IF;
V_SQL_STR:=CONCAT(V_SQL_STR,'from table1');
V_SQL_STR:=CONCAT(V_SQL_STR,'where ');
V_SQL_STR:=CONCAT(V_SQL_STR,'[加上查询条件]');
OPEN P_CUR FOR V_SQL_STR ; --打开游标,开始查询
拼接语句,写起来调试比较麻烦一定要沉下心来慢慢理。
1.在拼接where条件时,如果用到时间变量,要注意时间格式以及转换,调试了好久这个时间条件。
2.在拼接时,有的地方输入变量为定值,应注意单引号的使用。
更多推荐
拼接SQL语句[Oracle]
发布评论