拼接SQL语句[Oracle]

来源:互联网 发布:淘宝如何设置包邮 编辑:程序博客网 时间:2024/05/21 09:53

因为项目需要,有一段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.在拼接时,有的地方输入变量为定值,应注意单引号的使用。

原创粉丝点击