MySQL PLSQL Demo - 004.模拟动态游标

参考:写MySQL存储过程实现动态执行SQL,也可以用临时表代替视图。

drop procedure if exists p_simulate_dynamic_cursor;

create procedure p_simulate_dynamic_cursor()
begin
    declare v_sql varchar(4000);
        declare v_field varchar(4000);
        declare v_result varchar(4000) default ‘‘;
        declare cur_temp cursor for select v.* from view_temp_20150701 v;
        declare continue handler for not found set v_field = null;

        set v_sql = ‘create view view_temp_20150701 as select t.id from t_user t‘;

        set @v_sql = v_sql;
        prepare statement from @v_sql;
        execute statement;
        deallocate prepare statement;

        open cur_temp;
        fetch cur_temp into v_field;
        while (v_field is not null) do
                set v_result = concat(v_result, v_field, ‘,‘);
                fetch cur_temp into v_field;
        end while;
        close cur_temp;
        select v_result;

        drop view if exists view_temp_20150701;
end;

call p_simulate_dynamic_cursor();
        
时间: 2024-08-28 02:36:19

MySQL PLSQL Demo - 004.模拟动态游标的相关文章

MySQL PLSQL Demo - 003.静态游标

drop procedure if exists p_hello_world; create procedure p_hello_world() begin declare id integer; declare username varchar(256); declare result varchar(4000) default ''; /* don't work */ /*declare cur_user cursor for select id from p_user where id i

Oracle PLSQL Demo - 15.强类型REF游标[预先指定查询类型与返回类型]

declare Type ref_cur_emp IS REF CURSOR RETURN scott.emp%RowType; cur_emp ref_cur_emp; rec_emp cur_emp%RowType; v_sql varchar2(100) := 'select * from scott.emp t'; begin -- xxx Open cur_emp For v_sql; Open cur_emp For select * from scott.emp t; Loop f

【MySQL】MySQL PLSQL Demo - 006.循环(WHILE DO and FOR LOOP)

WHILE DO drop procedure if exists p_while_do; create procedure p_while_do() begin declare i int; set i = 1; while i <= 10 do select concat('index : ', i); set i = i + 1; end while; end; call p_while_do(); FOR LOOP drop procedure if exists p_for_loop;

MySQL PLSQL Demo - 001.创建、调用、删除过程

drop procedure if exists p_hello_world; create procedure p_hello_world() begin select sysdate(); end; call p_hello_world();

MySQL PLSQL Demo - 005.IF THEN ELSEIF THEN ELSE END IF

drop procedure if exists p_hello_world; create procedure p_hello_world(in v_id int) begin if (v_id > 0) then select '> 0'; elseif (v_id = 0) then select '= 0'; else select '< 0'; end if; end; call p_hello_world(-9);

『ORACLE』 PLSQL动态游标的使用(11g)

#静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的. 动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成. 从这个角度来说,静态游标的效率也比动态游标更高一些. #游标的相关概念: 定义: 游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里 存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中 的指针 来提取游标中的数据,然后来进行操作. 实质: 是用户在远程客户端上对服务器内存区域的操作

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理和自定义异常

游标的概念:    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率.游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种 形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要

一个简单的Webservice的demo,简单模拟服务

前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一下Webservice,将二者进行比较学习.考虑到以后的发展,当时决定学习WCF,希望自己在不久的将来能将WCF学的稍微精通点吧.这几天又将Webservice看了一遍,回想当时学习Webservice处处碰到坑,由于没人指点,连最基本地点发布都折腾好长时间,只能一点一点的填坑跳坑.这几天闲了,想写一个简单的

Oracle异常处理,动态游标

小例子,方便以后查阅. 包头需要声明:   type C_CURSOR is ref cursor; procedure visitcount(in_date number, out_code out number, out_desc out varchar2 ) is t_date number(8); t_datepre number(8); t_sql varchar2(2000); t_tempcount number(8); c_data C_CURSOR; v_cityname va