在PL/SQL中使用游标、动态sql和绑定变量的小例子

需求:查询并输出30号部门的雇员信息

方式一:使用 loop...fetch

 1 SET serveroutput ON;
 2 DECLARE
 3   CURSOR c_emp IS
 4     SELECT * FROM emp WHERE deptno = 30;
 5   v_emp emp%rowtype;
 6 BEGIN
 7   OPEN c_emp;
 8     loop
 9       fetch c_emp INTO v_emp;
10       exit WHEN c_emp%notfound;
11       dbms_output.put_line(v_emp.empno||‘  ‘||v_emp.ename||‘  ‘||v_emp.job||‘  ‘||v_emp.mgr||‘  ‘||v_emp.hiredate||‘  ‘||v_emp.sal||‘  ‘||v_emp.comm||‘  ‘||v_emp.deptno);
12     end loop;
13   close c_emp;
14 END;
15 /

方式二:使用游标 for 循环

 1 SET serveroutput ON;
 2 DECLARE
 3   CURSOR c_emp IS
 4     SELECT * FROM emp WHERE deptno = 30;
 5   v_emp emp%rowtype;
 6 BEGIN
 7   FOR e IN c_emp loop
 8     dbms_output.put_line(e.empno||‘  ‘||e.ename||‘  ‘||e.job||‘  ‘||e.mgr||‘  ‘||e.hiredate||‘  ‘||e.sal||‘  ‘||e.comm||‘  ‘||e.deptno);
 9   end loop;
10 END;
11 /

方式三:使用动态sql和绑定变量

 1 SET serveroutput ON;
 2 DECLARE
 3   TYPE emp_cursor IS REF CURSOR;
 4   c_emp emp_cursor;
 5   v_emp emp%rowtype;
 6 BEGIN
 7   OPEN c_emp FOR ‘select * from emp where deptno =:n‘ USING 30;
 8   loop
 9     fetch c_emp INTO v_emp;
10       exit WHEN c_emp%notfound;
11       dbms_output.put_line(v_emp.empno||‘  ‘||v_emp.ename||‘  ‘||v_emp.job||‘  ‘||v_emp.mgr||‘  ‘||v_emp.hiredate||‘  ‘||v_emp.sal||‘  ‘||v_emp.comm||‘  ‘||v_emp.deptno);
12   END loop;
13   close c_emp;
14 END;
15 /
时间: 2024-10-29 19:07:55

在PL/SQL中使用游标、动态sql和绑定变量的小例子的相关文章

PL/SQL中的游标

游标 :是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情. 定义游标:就是定义一个游标名,以及与其相对应的SELECT 语句 ,     其    一般形式为:   CURSOR cursor_name IS  select_statement; 打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合.OPEN cursor_name: 提取游标:就是检索结果集

理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL

本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最初关注点中:为什么语句在应用程序中慢,但是在SSMS中快?到目前为止,都是在说存储过程的情况.而存储过程的问题通常是因为SET ARITHABORT的不同设置项的原因.如果你的应用不使用存储过程,而是通过中间层提交客户端的查询,那么也有几个原因可能让你的查询因为不同的缓存条目从而使得在SSMS和应用程序中的运

pl/sql 中F8执行单行sql

pl/sql中设置: tools->preferences->sql window->AutoSelect statement

MySQL存储过程中实现执行动态SQL语句

sql语句中的任何部分都可以作为参数. DROP PROCEDURE if exists insertdata; delimiter //CREATE PROCEDURE insertdata(IN table_name varchar(255))begin declare var_sql varchar(800); set var_sql = concat_ws(' ', 'select count(*) from ', table_name,' where c_purchase_id is

SQL Server创建存储过程——动态SQL

简介: 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功, 存储过程并不能像函数那样被直接调用,只能利用 execute 来执行存储过程. 优点: 1.提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过

oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量

-如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAREA本视图持续跟踪所有shared pool中的共享cursor,--在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面非常重要./***1.查看消耗资源最多的SQL:SELECT hash_value, executions, buffer_gets, di

SQL 中的游标实例

--声明变量 declare @IMType varchar(10),@IMResourceID varchar(10) --定义游标 declare information_cursor cursor for select [IMType],[IMResourceID] FROM [BJYX].[dbo].[Information] --打开游标 open information_cursor --搜索行,并将数据存储在变量中 Fetch next from information_curso

Mybatis中的update动态SQL语句 &lt;trim&gt;&lt;/trim&gt; 用法

Mybatis Mapper中文件中 update时,需要set设置多个字段,有时逗号处理时,会报错误,所以会使用到<trim></trim> 使用trim就是为了删掉最后字段的",". 主要不用单独写SET了,因为set被包含在trim中了: <update id="update" parameterType="com.entity.Entity"> <trim prefix="set&quo

mybatis @Select注解中如何拼写动态sql

@Mapper public interface DemandCommentMapper extends BaseMapper<DemandComment>{ @Select("SELECT " + "a.id as 'id',a.create_date as 'createDate',a.content as 'content'," + "a.parent_id as 'parentId',a.first_comment_id as 'fir