精华内容
下载资源
问答
  • --公共查询一张表的存储过程 create proc commmonGetData (  @tableName varchar(50),  @condation varchar(150),  @myCount int output ) as begin declare @strs nvarchar(500) set @strs='' if(@condatio

     

     

    --公共查询一张表的存储过程
    create proc commmonGetData
    (
        @tableName varchar(50),
        @condation varchar(150),
        @myCount int output
    )
    as
    begin
    declare @strs nvarchar(500)
    set @strs=''
    if(@condation='')
    begin
     
     set @strs = 'select * from'+ @tableName
    end
    if(@condation!='')
    begin
    set @strs = 'select * from '+ @tableName+' where '+@condation
    end
    exec sp_executesql @strs

    end


    - - exec commmonGetData 'T_User',' Fusername=''admin''',0


    CREATE PROCEDURE [dbo].[spSearchStudentInfo]
    @StartDate DATETIME = NULL,
    @EndDate DATETIME = NULL
    AS


    BEGIN
    SELECT ID,Name,StartDate,EndDate,Age
    FROM dbo.Student WITH(NOLOCK)
    WHERE (StartDate >= @StartDate OR @StartDate IS NULL) AND (EndDate <= @EndDate OR @EndDate IS NULL)
    END





     

    展开全文
  • 但是,MySQL实现的存储过程略有不同。 MySQL存储过程按需编译。 在编译存储过程之后,MySQL将其放入缓存中。MySQL为每个连接维护自己的存储过程高速缓存。 如果应用程序在单个连接中多次使用存储过程,则使用编译...

    经常有朋友问存储过程怎么写,有什么好处。
    1、通常存储过程有助于提高应用程序的性能。当创建,存储过程被编译之后,就存储在数据库中。
    但是,MySQL实现的存储过程略有不同。 MySQL存储过程按需编译。
    在编译存储过程之后,MySQL将其放入缓存中。MySQL为每个连接维护自己的存储过程高速缓存。
    如果应用程序在单个连接中多次使用存储过程,则使用编译版本,否则存储过程的工作方式类似于查询。

    2、存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的SQL语句,而只能发送存储过程的名称和参数。

    3、存储的程序对任何应用程序都是可重用的和透明的。存储过程将数据库接口暴露给所有应用程序,以便开发人员不必开发存储过程中已支持的功能。

    4、存储的程序是安全的。数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。

    附上代码

    		-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
    		DROP PROCEDURE IF EXISTS test;
    		-- 创建存储过程
    		CREATE PROCEDURE test()
    		BEGIN
    		//定义循环游标
    		DECLARE s int DEFAULT 0;
    		//查询出来的id结果集
    		DECLARE ids VARCHAR(255);
    		//查询出来的测试数量结果集
    		DECLARE dia VARCHAR(255);
    		//创建游标,这里是我查询出来的结果集放入t1
    		DECLARE t1 CURSOR FOR SELECT id,diamond FROM tb_user_luohao;
    		-- 声明当游标遍历完后将标志变量置成某个值
    		DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
    		 -- 打开游标
    		open t1;
    		fetch t1 into ids,dia;
    		while s<>1 DO
    		UPDATE tb_user SET diamond=dia WHERE id=ids;
    		fetch t1 into ids,dia;
    		end WHILE;
    		CLOSE t1;
    		END
    
    展开全文
  • 需要定时查询现有的一张表,然后将查询结果插入到另一张表查询的表结构(表名:mouse_tbl)如下图 查询结果要插入表(data_time)结构如下: 我们需求是将表mouse_tbl中所有数据对应用户id、日期、时间...

    需求分析

    需要定时查询现有的一张表,然后将查询结果插入到另一张表。
    查询的表结构(表名:mouse_tbl)如下图
    在这里插入图片描述
    查询结果要插入的表(data_time)的结构如下:
    在这里插入图片描述
    我们的需求是将表mouse_tbl中所有数据对应的用户id、日期、时间的小时查询出来,然后插入到data_time表中。
    我们实际的需求是想要看到用户在那个日期以及该日期下哪个时间(小时)有数据记录。

    解决方案

    -- 创建一个存储过程,命名为writeTime
    create procedure writeTime()
    BEGIN
    insert into data_time(`user_id`,`date`,`hour`) select user_id,date,left(time,2) as hour from keyboard_tbl group by user_id,date,hour;
    end;
    
    -- 创建一个定时事件命名为eventJob,该事件调用writeTime存储过程,并定义事件执行的频率为从现在开始每30min执行一次
    create event if not exists eventJob
    on schedule every 30 MINUTE STARTS NOW()
    on completion PRESERVE
    do call writeTime();
    
    -- 启动定时器
    SET GLOBAL event_scheduler = 1;
    -- 启动事件 eventJob
    ALTER EVENT eventJob ON  COMPLETION PRESERVE ENABLE;
    

    如果后续想关闭定时器和事件可以参考下面的设置

    -- 停止定时器
    SET GLOBAL event_scheduler = 0;  
    -- 关闭事件
    ALTER EVENT eventJob ON  COMPLETION PRESERVE DISABLE;  
    

    存储过程相关基本操作

    • 存储过程:存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用“CALL存储过程名字”即可自动完成。
    • 存储过程的优点:
    1. 封装性
    2. 增强SQL语句的功能和灵活性
    3. 可减少网络流量
    4. 高性能
    5. 提高数据库的安全性和数据的完整性
    • 自定义语句结束符号
      在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。
      然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。
      语法格式如下:
    DELIMITER $$
    

    使用举例

    DELIMITER $$ 
    DROP PROCEDURE IF EXISTS e_test $$ 
    CREATE PROCEDURE e_test() 
    BEGIN 
    INSERT INTO t VALUES('1'); 
    END $$ 
    DELIMITER ; 
    
    • 查看存储过程的状态
    SHOW PROCEDURE STATUS LIKE 存储过程名;
    
    • 查看存储过程的定义
    SHOW CREATE PROCEDURE 存储过程名;
    
    • 删除存储过程
    DROP PROCEDURE [ IF EXISTS ] <过程名>
    

    事件(event)相关基本操作

    • 查看事件信息
    SELECT * FROM mysql.event;
    
    • 开启/关闭定时器
    SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on 
    
    • 查看是否开启定时器
    SHOW VARIABLES LIKE 'event_scheduler';
    
    • 修改配置,使默认开启事件(否则重启MySQL服务会被关闭)
      在my.ini配置文件的[mysqld]部分加上
      event_scheduler=ON
    展开全文
  • 如table1: name time :2012-12-12 total table2:name timesteamp :12/12月/2012 ...这里我要将2中某个名字和日期和他们(名字日期一致)总条数,查出来放到1中, 如何实现?
  • # 如果存在名字为testprocedure则删除 drop procedure if exists test; # 创建(创建函数使用关键字为function 函数名()) create procedure test() begin # 声明变量 declare old_orgid decimal(10); #...
    # 如果存在名字为test的procedure则删除
    drop procedure if exists test; 
     # 创建(创建函数使用的关键字为function 函数名())
    create procedure test()
    begin
        # 声明变量
        declare old_orgid decimal(10); 
        #declare temp_id decimal(10);
        declare flag int default 0;
        # 这是重点,定义一个游标来记录sql查询的结果
        declare s_list cursor for SELECT org_organization.ORGID FROM org_organization WHERE org_organization.ORGID NOT IN (SELECT cap_partyauth.PARTY_ID FROM cap_partyauth); 
        # 为下面while循环建立一个退出标志,当游标遍历完后将flag的值设置为1
        declare continue handler for not found set flag=1;
       # 打开游标    
      open s_list;  
        # 将游标中的值赋给定义好的变量,实现for循环的要点
            fetch s_list into old_orgid;
            while flag <> 1 do
    	   INSERT INTO cap_partyauth (ROLE_TYPE,PARTY_ID,PARTY_TYPE,ROLE_ID,TENANT_ID,CREATEUSER,CREATETIME) value ('role',old_orgid,'org','1001','default','sysadmin',now());
                # 游标往后移(此处的游标是不是让你想起了C里面的指针)
                fetch s_list into old_orgid;
            end while;
            ##select * from s_list;
        close s_list;  # 关闭游标
    end;
    call test(); # 调用
    
    展开全文
  • sql数据库中有表 inventory,表中...存储过程gylxqj依次执行inventory中字段cinvcode所有值,再把每个值执行结果 在一张表上体现出来? 我试过用游标,但是一直在循环执行,跳不出来。不知道还有没有其它方式。
  • http://blog.csdn.net/tengdazhang770960436/article/details/8185995 ...创建主:MESSAGE1 create table MESSAGE1 (  ID NUMBER not null,  RECEIVE_TIME DATE,  PK_ID NUMB
  • insert into Table1 exec SP_****** @par
  • sql查出来结果集: ![查询结果,返回memberid](https://img-ask.csdn.net/upload/201604/11/1460334280_418554.jpg) ...不存在则把第一张图里memberid和integral字段作为一条新记录插入),存储过程语句怎么写?
  • 问题:在做项目的过程中遇到一个人问题:那就是将A表的deco字段的值,作为B表的列来展示,而且这些值的数据是从C表中取到的 方法:本来是想用,一个视图来列出deco字段...记录来处理,所以自己写出了如下的存储过程
  • ``` ALTER PROCEDURE [dbo].[bb_sx_sclr] @KSRQ varchar(20), --开始时间 @JSRQ varchar(20) --结束时间 ...消息 156,级别 15,状态 1,过程 bb_sx_sclr,第 53 行 关键字 'END' 附近有语法错误。
  • 使用oracle的存储过程方法。 如果用sql语言实现大致逻辑是这样的: insert into T2(id,code,date) select (t.id,t.code,t.date) from T1 t where t.date=to_date('2/23/2016 ','mm/dd/yyyy '); 通过日期查询T1中...
  • 1、取出三张表里符合条件数据,合成一张表,并对这一张表分页; 2、计算合成这张表总共多少条数据 存储过程语句如下: Create PROCEDURE GetAnnouncementList  @pageSize int,  @pageIndex int ...
  • create table t1(c1 varchar(20));insert into t1 select 't1'; create table t2(c2 varchar(20));insert into t2 select 't2'; delimiter $$DROP PROCEDURE IF EXISTS test_1 ;CREATE PROCEDURE test_1(...
  • 存储过程中,根据一张主表去创建一张副表。 在根据需要限制的时间,查询主表里面的数据。将主表的数据插入到新建的副表里面同时将主表的数据删除,使用事物进行控制操作的过程
  • 说明:分数表本应该引用课程id(course_id)作为外键,此处重点在于练习mysql的存储过程,为了能够直观的看到结果,所以此处使用课程名称作为分数表的列,也没有创建课程表(备注:测试数据只需保证课程名称不重复...
  • 从网上找,采用了游标进行了存储...现在修改了该存储过程,使其只生成一张表。 create procedure [dbo].[Pr_QueryByPage] @sqlstr nvarchar(4000), --查询sql @currentpage int, --第页记录条数 @pagesize i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 676
精华内容 270
关键字:

查询一张表的存储过程