精华内容
下载资源
问答
  • 动态sql语句

    千次阅读 2018-12-05 22:00:32
     mybatis 核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。  首先要对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。     实现的是sql的拼接   使用where...

     1、什么是动态sql?

          mybatis 核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

        首先要对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

     

     

    实现的是sql的拼接

     

    使用where标签可以去掉第一个前and

    使用sql标签:提取出来公共的部分,等到要使用的时候就通过调用

        

    调用sql标签中的公共部分

     

    使用多个ID查询查询用户信息

    这是三种方法,在使用第三种方法的时候要记得在QueryVo 中放入idsList与ids 二个参数

    小面查询是根据第三种方法实现的

     

     

     

     

    使用的是第一种方法实现根据多个ID查询数据

    错误的事例

     

    正确的写法

     

    注意:实现单表查询的时候,在映射字段中只需要写不相同的字段,相同的字段可以不用映射

              实现一对一查询的时候,不管是不是相同的字段都需要写映射关系

                

    展开全文
  • SQLServer 执行动态SQL语句

    千次阅读 2019-09-22 17:04:38
    执行动态SQL语句 首先定义变量 @Games 为运动会名称, 为动态SQL语句定义变量 然后建立动态SQL语句 最后运行这个动态SQL语句 EXEC (@SQL2) 或 Exec SP_ExecuteSQL @SQL2 -- 执行动态SQL语句示例,复制后可直接...

    执行动态SQL语句

    首先定义变量 @Games 为运动会名称,
    为动态SQL语句定义变量
    然后建立动态的SQL语句
    最后运行这个动态的SQL语句 EXEC (@SQL2) 或 Exec SP_ExecuteSQL @SQL2

    -- 执行动态SQL语句示例,复制后可直接运行,运行过程中执行SQL3的语句会出错
    DECLARE @Games VARCHAR(20)
    DECLARE @NUM   SMALLINT
    DECLARE @STR   NVARCHAR(4000)
    DECLARE @SQL1  NVARCHAR(4000)    -- 第1种数据类型
    DECLARE @SQL2  NVARCHAR(4000)    -- 第1种数据类型
    DECLARE @SQL3  VARCHAR(4000)     -- 第2种数据类型
    
    SELECT @Games = Games FROM (SELECT '市全运会' Games) A
    
    -- 设置相同的SQL语句
    SET @STR = 'WITH Team (Games,GroupType,SEX,Team) AS ('
    SET @STR = @STR + ' SELECT ''市全运会'',''高中组'',''男'',''100米'' UNION ALL'
    SET @STR = @STR + ' SELECT ''市全运会'',''高中组'',''女'',''100米'' UNION ALL'
    SET @STR = @STR + ' SELECT ''市全运会'',''初中组'',''男'',''100米'' UNION ALL'
    SET @STR = @STR + ' SELECT ''市全运会'',''初中组'',''女'',''100米'' )'
    
    SET @SQL1 = @STR + ' SELECT @A=COUNT(*) FROM Team WHERE SEX = ''女'''
    SET @SQL2 = @STR + ' SELECT Games,GroupType,SEX,Team FROM Team WHERE Games = ''' + @Games + ''''
    SET @SQL3 = @SQL2
    
    EXEC (@SQL2)    -- 执行动态SQL成功
    EXEC (@SQL3)    -- 执行动态SQL成功
    
    Exec SP_ExecuteSQL @SQL2     -- 执行动态SQL成功
    Exec SP_ExecuteSQL @SQL3     -- 执行动态SQL出错 显示错误信息为:需要类型为 'ntext/nchar/nvarchar' 的参数
    
    Exec SP_ExecuteSQL @SQL1,N'@A INT Output',@num Output  -- 成功将动态SQL语句的运行结果保存在变量@NUM中
    SELECT @NUM
    
    展开全文
  • MyBatis动态sql语句使用

    千次阅读 2019-07-02 16:43:32
    一、MyBatis动态语句分为4种元素: 元素 作用 描述 if 条件判断 单条件判断 choose(when、otherwise) 条件选择,相当Java when 多条件分支判断 ...二、Mybatis动态sql语句使用方式、例子 ...

    一、MyBatis动态语句分为4种元素:

    元素作用描述
    if条件判断单条件判断
    choose(when、otherwise)条件选择,相当Java when多条件分支判断
    where、set辅助处理sql语句拼接问题
    foreache循环循环

     

    二、Mybatis动态sql语句使用方式、例子

    1、if元素,如下

    <select id="selByName" resultType="yuan.yuanmybatis.entity.Account">
           select id,name,created,updated from account where 1=1
           <if test="name !=null and name !=''">
               and name like concat('%',#{name},'%')
           </if>
        </select>

     

    2.choose

    <select id="selByChoose" resultType="yuan.yuanmybatis.entity.Account">
            select id,name,created,updated,money from account where 1=1
            <choose>
                <when test="name !=null and name !=''">
                    and name like concat('%',#{name},'%')
                </when>
                <when test="money !=null and money !=''">
                    and name =#{money}
                </when>
                <otherwise>
                    and isdeleted=1
                </otherwise>
            </choose>
        </select>

    3、where元素,细心的读者会发现1、2点会有一个1=1,如果没有1=1,那么会变成如下错误语句:

    select id,name,created,updated,money from account where and name like concat('%',#{name},'%') 

    这个时候我们可以用where元素处理sql:

     <select id="selByName" resultType="yuan.yuanmybatis.entity.Account">
        select id,name,created,updated from account
        <where>
        <if test="name !=null and name !=''">
            and name like concat('%',#{name},'%')
        </if>
        </where>
        </select>

    where元素在里面的条件成立的时候,才会加入where这个sql关键字。

    4、trim元素可以帮助我们去掉一下and、or等,prefix代表语句前缀, prefixOverrides代表要去掉的字符串

     <select id="selByChoose" resultType="yuan.yuanmybatis.entity.Account">
            select id,name,created,updated,money from account
            <trim prefix="where" prefixOverrides="and">
            <choose>
                <when test="name !=null and name !=''">
                    and name like concat('%',#{name},'%')
                </when>
                <when test="money !=null and money !=''">
                    and name =#{money}
                </when>
                <otherwise>
                    and isdeleted=1
                </otherwise>
            </choose>
            </trim>
        </select>

    5、set元素,它可以在遇到逗号的时候,把对应的逗号去掉

    <update id="updateAccout" parameterType="yuan.yuanmybatis.entity.Account">
            update account
            <set>
                <if test="name !=null and name !=''">
                   name=#{name},
                </if>
                <if test="money!=null and money!=''">
                   money=#{money}
                </if>
            </set>
            where id=#{id}
        </update>

    6、foreach元素,它时一个循环语句,作用时用来遍历集合,支持数组、List、Set接口集合

    <select id="selIn" resultType="yuan.yuanmybatis.entity.Account">
            select id,name,created,updated from account where name in
            <foreach collection="nameList" index="index" item="name" open="(" separator="," close=")">
            #{name}
           </foreach>
       </select>

     

    展开全文
  • ORACLE动态SQL语句

    万次阅读 2017-11-03 12:06:32
    问题的提出我们经常需要运行可变化的SQL语句,这种通常称为动态SQL,在ORACLE中执行动态SQL语句,需要了解ORACLE的动态SQL语句的相关规定。 SQL动态语句是由程序或者存储过程生成的SQL语句,这种语句的特点是,不...

    问题的提出

    我们经常需要运行可变化的SQL语句,这种通常称为动态SQL,在ORACLE中执行动态的SQL语句,需要了解ORACLE的动态SQL语句的相关规定。
    SQL动态语句是由程序或者存储过程生成的SQL语句,这种语句的特点是,不能简单的去运行。因为它不是标准的,其中含有变化的成分,因此ORACLE提供了一个执行动态SQL语句的模式:
    EXECUTE IMMEDIATE
    这句话的含义是立即执行,而不先去进行语法检查,在执行过程中可能会发生逻辑错误,则通过错误中断进行处理。

    一种动态SQL的方法

    /***
      DBMS_OUTPUT.PUT_LINE(uSQL);
    
      p_Money_TJ
    
      CALL p_Money_TJ();
      测试在SQL*PLUS下进行
      VAR r refcursor;
      Exec p_Money_TJ(:r);
      print r;
    ***/
    CREATE OR REPLACE PROCEDURE p_Money_TJ(p_cur out sys_refcursor)
    AS
    
    -- 变量定义
    
    Cursor CC IS
    SELECT FTYPE FROM APP_MONEY GROUP BY FTYPE;
    uSQL VARCHAR2(32600);
    BEGIN
      uSQL :=         'BEGIN OPEN :p_cur for ';
      uSQL := uSQL || 'SELECT FMID 会员账号,F_GETXM(FMID) 会员姓名';
      FOR C IN CC LOOP
        uSQL := uSQL || ',SUM(CASE WHEN FTYPE = '''||C.FTYPE||''' THEN FMONEY END) '||C.FTYPE;
      END LOOP;
      uSQL := uSQL || ' FROM APP_MONEY GROUP BY FMID';
      uSQL := uSQL || '; END;';
    
      EXECUTE IMMEDIATE uSQL USING p_cur;
    END;

    使用动态游标

    1、声明动态游标

    TYPE cc_type IS REF CURSOR;

    2、声明游标变量

    my_cursor cc_type;

    3、使用游标

    n_deptno:=20;
    uSQL := 'SELECT empno,ename FROM emp WHERE deptno = '||n_deptno;
    OPEN my_cursor FOR uSQL;
    LOOP 
      FETCH my_cursor INTO n_empno,v_ename;
      EXIT WHEN my_cursor%NOTFOUND;
      --用n_empno,v_ename做其它处理
      --....
    END LOOP;
    CLOSE my_cursor;

    4、小结
    动态游标可以胜任大多数动态SQL的需求了,使用简洁方便。

    使用 EXECUTE IMMEDIATE

    最早大家都使用DBMS_SQL包,但是太太麻烦了,最终都放弃了。但是自从有了EXECUTE IMMEDIATE之后,但要注意以下几点:
    EXECUTE IMMEDIATE代替了以前 Oracle8i 中 DBMS SQL package包, 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块。动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码。尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。
    使用技巧
    1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据
    2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF cursors.
    3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.
    4. 在Oracle手册中,未详细覆盖这些功能。下面的例子展示了所有用到Execute immediate的可能方面.希望能给你带来方便.
    5. 对于Forms开发者,当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能.

    EXECUTE IMMEDIATE用法例子

    1. 在PL/SQL运行DDL语句

    begin
      execute immediate 'set role all';
    end;

    2. 给动态语句传值(USING 子句)

    declare
      l_depnam varchar2(20) := 'testing';
      l_loc    varchar2(10) := 'Dubai';
    begin
      execute immediate 'insert into dept values  (:1, :2, :3)'
      using 50, l_depnam, l_loc;
      commit;
    end;

    3. 从动态语句检索值(INTO子句)

    declare
      l_cnt    varchar2(20);
    begin
      execute immediate 'select count(1) from emp'
      into l_cnt;
      dbms_output.put_line(l_cnt);
    end;
    

    4. 动态调用例程

    例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定

    declare
      l_routin   varchar2(100) := 'gen2161.get_rowcnt';
      l_tblnam   varchar2(20) := 'emp';
      l_cnt      number;
      l_status   varchar2(200);
    begin
      execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'
      using in l_tblnam, out l_cnt, in out l_status;
    
      if l_status != 'OK' then
         dbms_output.put_line('error');
      end if;
    end;
    

    5. 将返回值传递到PL/SQL记录类型

    同样也可用%rowtype变量

    declare
      type empdtlrec is record (empno  number(4),ename  varchar2(20),deptno  number(2));
      empdtl empdtlrec;
    begin
      execute immediate 'select empno, ename, deptno '||'from emp where empno = 7934'
      into empdtl;
    end;
    

    6. 传递并检索值

    INTO子句用在USING子句前

    declare
      l_dept    pls_integer := 20;
      l_nam     varchar2(20);
      l_loc     varchar2(20);
    begin
      execute immediate 'select dname, loc from dept where deptno = :1'
      into l_nam, l_loc
      using l_dept ;
    end;
    

    7. 多行查询选项

    对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾.

    declare
      l_sal   pls_integer := 2000;
    begin
      execute immediate 'insert into temp(empno, ename) ' ||
                       '          select empno, ename from emp ' ||
                       '          where  sal > :1'
      using l_sal;
      commit;
    end;
    

    对于处理动态语句,EXECUTE IMMEDIATE比以前可能用到的更容易并且更高效.当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.
    Oracle 动态SQL
    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。试验步骤如下:

    1. DDL 和 DML

    /*** DDL ***/  
    begin  
        EXECUTE IMMEDIATE 'drop table temp_1';  
        EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';  
    end;  
    
    /*** DML ***/  
    declare  
        v_1 varchar2(8);  
        v_2 varchar2(10);  
        str varchar2(50);  
    begin  
        v_1:='测试人员';  
        v_2:='北京';  
        str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';  
        EXECUTE IMMEDIATE str USING v_1, v_2;  
        commit;  
    end;  

    2. 返回单条结果

    declare  
        str varchar2(500);  
        c_1 varchar2(10);  
        r_1 test%rowtype;  
    begin  
        c_1:='测试人员';  
        str:='select * from test where name=:c WHERE ROWNUM=1';  
        execute immediate str into r_1 using c_1;  
        DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);  
    end ;  

    3. 返回结果集

    CREATE OR REPLACE package pkg_test as  
        /* 定义ref cursor类型  
        不加return类型,为弱类型,允许动态sql查询,  
        否则为强类型,无法使用动态sql查询;  
        */  
        type myrctype is ref cursor;  
    
        --函数申明  
        function get(intID number) return myrctype;  
    end pkg_test;  
    /  
    
    CREATE OR REPLACE package body pkg_test as  
    --函数体  
        function get(intID number) return myrctype is  
            rc myrctype; --定义ref cursor变量  
            sqlstr varchar2(500);  
        begin  
            if intID=0 then  
                --静态测试,直接用select语句直接返回结果  
                open rc for select id,name,sex,address,postcode,birthday from  
    student;  
            else  
                --动态sql赋值,用:w_id来申明该变量从外部获得  
                sqlstr := 'select id,name,sex,address,postcode,birthday from student  
    where id=:w_id';  
                --动态测试,用sqlstr字符串返回结果,用using关键词传递参数  
                open rc for sqlstr using intid;  
            end if;  
    
            return rc;  
        end get;  
    
    end pkg_test;  
    展开全文
  • 理解动态SQL语句 动态SQL语句基础 动态SQL语句不仅是指SQL语句动态拼接而成的,更主要的是SQL语句所使用的对象也是运行时期才创建的。出现这种功能跟PL/SQL本身的早起绑定特性有关,早PL/SQL中,所有的对象必须...
  • MyBatis中动态sql语句标签详解

    千次阅读 2019-03-12 13:56:24
    动态 SQL 通常写在mapper包下面的地址映射配置文件(.xml)中。...动态SQL语句标签包括以下标签: where…if… 标签 choose…when…otherwise… 标签 set…if 标签 trim 标签 bind 标签 foreach 标签 inclu...
  • PL/SQL:open for [using] 语句 2017年07月19日 09:52:55 学孩儿无牙哭做粥 阅读数:681 标签: oracleSQLPLSQL 更多 个人分类: ORACLESQL/PLSQL 版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • 动态SQL标签 一、动态SQL片段 1.1 sql 标签 1.2 include 标签 二、动态SQL标签 2.1 select 标签 2.2 insert 标签 2.3 delete 标签 2.4 update 标签 三、配置 JAVA 对象属性与查询结果集中列名对应关系 四...
  • PB中执行动态SQL语句(温故知新)

    千次阅读 2018-05-19 10:20:47
    转自:http://blog.sina.com.cn/s/blog_538f907c0100fak4.htmlPowerBuilder的嵌入式SQL语句只能支持一些固定的标准的SQL语句,即在进行程序代码编译处理时这些SQL语句必须是确定的,另外这种方式也不能执行像Creat ...
  • Sqlserver 动态sql语句 和 use 关键字

    千次阅读 2019-10-26 16:46:17
    动态 sql语句 关键字execute 举列子 declare @Dataname varchar(20); set @Dataname = 'T'+convert(varchar(4),YEAR(GETDATE()))+'年'+convert(varchar(2),MONTH(GETDATE()))+'月'; execute ('Create table '...
  • 存储过程中执行动态Sql语句

    万次阅读 2018-08-26 18:50:28
    存储过程中执行动态Sql语句  MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_...
  • 动态SQL语句的语法

    万次阅读 2013-11-14 22:16:43
    动态SQL是在运行时生成和执行SQL语句的编程方法。动态是和静态相对而言的。静态SQL指的是在代码编译时刻就已经包含在代码中的那些已经充分明确的固定的SQL语句。 PL/ SQL提供了两种方式来编写动态SQL: 本地动态SQL...
  • SpringData JPA @Query动态SQL语句

    万次阅读 多人点赞 2019-05-07 20:17:31
    这次有个需求,需要动态sql语句去查询,但是@Query正常情况下SQL语句是写死的,在查找了很多资料后,想到了一个好的解决办法 思路 利用MYSQL的判断来拼接SQL语句 实现 先上代码 @Query(value = "select * ...
  • 如何编写mybatis动态sql语句

    千次阅读 2017-07-28 17:20:00
    如何编写mybatis动态sql语句? 近期在做一个复杂的条件查询功能,整理了一些知识,希望可以帮助到大家。    有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询...
  • mybatis-动态sql语句-if用法

    万次阅读 2017-08-27 15:50:08
    上一篇,初步了解了一下mybatis----mybatis-简介,我们已经了解mybatis进行调用的过程,这一次主要来说如何进行动态sql语句的拼写,这次主要讲解if的应用。 查询: 咱们接着上一篇博客说,依然选用根据模糊查询或...
  • Mybatis中where动态sql语句

    千次阅读 2018-03-11 16:51:37
    where动态sql 能够智能拼接查询条件 能够智能处理第一个and或or 每个查询条件前都加and
  • mybatis的增删改查动态sql语句

    千次阅读 2018-06-08 18:51:46
    -- 动态SQL操作之查询 parameterType:表示参数类型 resultMap:表示返回类型--> select * from students !=null"> and students_id = #{id} !=null"> and students_name = #{name} ...
  • Java下拼接执行动态SQL语句

    万次阅读 2015-10-30 09:57:30
    在实际业务中经常需要拼接动态SQL来完成复杂数据计算,网上各类技术论坛都有讨论,比如下面这些问题:  http://bbs.csdn.net/topics/390876591  http://bbs.csdn.net/topics/390981627  ...
  • Jpa操作数据库之动态SQL语句的使用

    万次阅读 热门讨论 2018-01-17 18:29:56
    ,前台根据这三个字段实现条件查询,这三个参数都不是必须传的,可能前台只给一个,也可能会给多个,按照前台传参去查询数据,如果用以前的SSM获取很简单,一个动态SQL就搞定了,但是JPA就没有那么简单了,下面上...
  • Mybatis中的update动态SQL语句

    万次阅读 2017-06-24 15:52:54
    Mybatis中的CRUD操作(增删改查)中,简单的SQL操作比较直观,如查找操作: SELECT * FROM ENTITY_RELATION WHERE SRC_ID=#{srcId} 其中id对应同名java文件中的方法,resultMap对应的自定义的数据类型(当...
  • MyBatis中动态SQL语句完成多条件查询

    千次阅读 2017-09-26 15:44:57
    MyBatis中动态SQL语句完成多条件查询,条件可以为字符串,数值,时间,以及自定义的类. 写的不好之处请指教~ MyBatis的XML: select * from notifymanagementinfo where
  • MySQL基础----动态SQL语句

    万次阅读 2014-09-23 17:49:48
    动态sql语句基本语法  1 :普通SQL语句可以用Exec执行  eg: Select * from tableName   Exec('select * from tableName')   Exec sp_executesql N'select * from tableName' -- 请注意...
  • SQL Server存储过程中执行动态SQL语句

    千次阅读 2015-07-31 16:20:48
    一、简介 在Sql Server中执行动态sql语句有两种方法:exec和exec sp_executesql。 优缺点: 1、exec sp_executesql提供输入、输出接口,可以在sql语句中进行参数占位;exec则不可以。 2、exec sp_executesql能够...
  • MyBatis注解应用之动态SQL语句

    万次阅读 2016-07-03 16:01:16
    有时候,我们需要在输入的标准下,创建动态的查的语言。MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,这些都是建立动态语言和让MyBatis执行这些语言。 现在让我们...
  • Mybatis中动态Sql语句的拼接分析

    千次阅读 2019-07-21 22:42:45
    一、动态查询 1、方式一: <!--if标签:--> <!--if中的test属性必须录入,其内部为ognl表达式,不需要#{}。如果test内满足,则主体语句执行--> <select id="findAccount" parameterType="account...
  • @Select注解动态sql语句

    千次阅读 2018-06-13 11:39:23
    一、我们先看看xml配置的动态sql语句二、如何使用注解也能达到这种效果呢?1、先在sql里面加上标签&lt;script&gt; 2、之后就是用上面的配置,但是得注意双引号,和每一条语句的逗号分隔 @Select({"&...
  • mybatis中mapper文件中的动态sql语句

    千次阅读 2017-09-21 21:24:25
    有时候在检索时,用户提供的数据不一样多,我们很难使用静态的sql语句进行判别,所以这个时候需要使用动态sql语句 这里主要针对Mapper.xml文件中的sql语句,笔者在下面所有的例子中只提供了Mapper.xml文件中的动态...
  • 【PB】动态SQL语句

    万次阅读 2012-01-02 14:31:11
    所谓动态SQL语句是指部分或者整个SQL语句在运行时才能确定,这样的SQL语句可以用来设计能和用户进行更好交互的界面。因为参数的确定留给用户总比编程时由开发人员规定死要好得多。另外, PowerBuilder不支持有些SQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,564,342
精华内容 625,736
关键字:

动态sql语句