目录

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

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

3.动态调用存过

4.将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量

5.传递并检索值.INTO子句用在USING子句前

6.多行查询选项.对此选项用insert语句填充临时表

7.动态定义游标

--动态执行sql 包括ddl dml
--1.execute immediate 推荐使用 性能更优
--2.dbms_utility.exec_ddl_statement
begin
execute immediate 'select * from scott.emp';
execute immediate 'create table emp1121(id number,name varchar2(10),salary number )';
dbms_utility.exec_ddl_statement('create table emp111(id number,name varchar2(10),salary number )');
end;

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

--1.给动态语句传值(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;
select * from dept

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

--2.从动态语句检索值(INTO子句)
declare
l_cnt varchar2(20);
begin
execute immediate 'select count(1) from emp'
into l_cnt;
dbms_output.put_line(l_cnt);
end;

3.动态调用存过

--创建存过
create or replace procedure get_rowcnt(l_tblnam varchar2,
l_cnt out number,
l_status out varchar2) as
begin
select t.empno into l_cnt from emp t where rownum = 1;
l_cnt := 3;
l_status := 'OK';
end; --3.动态调用存过
declare
l_routin varchar2(100) := '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;

4.将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量

--4.将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量
declare
type empdtlrec is record(
empno number(4),
ename varchar2(20));
empdtl empdtlrec;
begin
execute immediate ' select empno, ename from emp where rownum=1'
into empdtl;
dbms_output.put_line(empdtl.empno);
end;

5.传递并检索值.INTO子句用在USING子句前

--5.传递并检索值.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;
dbms_output.put_line(l_nam);
end;

6.多行查询选项.对此选项用insert语句填充临时表

--6.多行查询选项.对此选项用insert语句填充临时表,
--用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾.
create table temp
(
empno number,
ename varchar2(111)
); 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; select * from temp;

7.动态定义游标

--7.动态定义游标
declare
msql varchar2(111) := 'select * from emp';
tbl_emp emp%rowtype;
type cur_type is ref CURSOR;
cur cur_type;
begin
OPEN cur for msql; --打开动态定义的游标
LOOP
FETCH cur
into tbl_emp; --循环赋值
EXIT WHEN cur%NOTFOUND; --跳出条件
dbms_output.put_line(tbl_emp.empno || ' ' || tbl_emp.ename); --打印
END LOOP;
end;

动态sql的更多相关文章

  1. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  2. Mysql - 游标/动态sql/事务

    游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...

  3. MyBatis4:动态SQL

    什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件串联SQL字符串在一起是多么地痛苦,确保不能忘了空格或者在列表的最后的 ...

  4. 分享公司DAO层动态SQL的一些封装

    主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...

  5. MySQL存储过程动态SQL语句的生成

    用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...

  6. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  7. 自定义函数执行动态sql语句

    --函数中不能调用动态SQL,使用用存储过程吧.如果还要对函数做其他操作,换成存储过程不方便,可以考虑把其他操作一起封装在存储过程里面.如:   create proc [dbo].[FUN_YSCL ...

  8. mybatis入门基础(五)----动态SQL

    一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.2.案例需求 用户信息综合查询列表这个statement的定义使用动态s ...

  9. mybatis 动态sql表达式相关应用

    一.mybatis 表达式简介 对于mybatis3 ,提供了一种动态sql的方式.通过动态sql我们可以直接在mybatis 的xm映射文件中直接通过条件判断的方式进行查询添加的拼接.mybatis ...

  10. (转)Mybatis高级映射、动态SQL及获得自增主键

    原文:http://www.cnblogs.com/edwinchen/p/4105278.html?utm_source=tuicool&utm_medium=referral 一.动态SQ ...

随机推荐

  1. css雪碧图生成工具4.1更新

    V4.0介绍地址:http://www.cnblogs.com/wang4517/p/4493917.html 此次更新主要针对已有BUG的修复,用户可在客户端上直接看到更新信息,自己去下载 已修复问 ...

  2. python-opencv笔记 图像的读取和简单几何图形绘制

  3. Jquery便利对象

    xhr=[object object]    $.each(xhr, function (key, val) {                     alert(key + '=' + val); ...

  4. VS2015 编译 Qwt6.1.3

    VS2015 + Qt5.7 编译 Qwt6.1.3 1. 将 qwtconfig.pri 中的 C:\Qwt 改为  D:/ProgramFiles/C_Library/Qwt/Qwt , 我的Qw ...

  5. android基础知识进阶

    1.android Activity的生命周期 http://blog.csdn.net/hpoi/article/details/4629065 2.android Service的生命周期 htt ...

  6. resin实现域名访问

    1.修改resin.properties 2.修改hosts文件 3.添加一行记录 配置完后就可以通过test.com访问项目了.

  7. linux安装jdk(非rpm命令)

    首先查看当前linux上安装的jdk版本: java -version 复制build 后面的jdk信息 卸载: rpm -e java-1.6.0_22-fcs 或者 yum -y remove j ...

  8. (转)论python工厂函数与内建函数

    所谓工厂函数就是指这些内建函数都是类对象, 当你调用它们时,实际上是创建了一个类实例.   工厂函数: int(),long(),float(),complex(),bool() str(),unic ...

  9. 《DSP using MATLAB》示例Example5.22

    代码: Nmax = 2048; fft_time = zeros(1, Nmax); for n = 1:1:Nmax x=rand(1,n); t=clock; fft(x); fft_time( ...

  10. 6种方法实现asp.net返回上一页

    其实要实现返回上一页的功能,主要还是要用到JavaScript. 一: 在ASP.net的aspx里面的源代码中 <input type="button onclick="J ...