mysql存儲過程

查詢當前數據庫所有存儲過程
select `name` from MySQL.proc where db = 'dbname' and `type` = 'PROCEDURE';

1.創建存儲過程
查詢所有值

delimiter  $$
create procedure query_all()
BEGIN
   select * from product;
END $$
delimiter ;

查詢某幾個字段
delimiter $$
create procedure query_col()
BEGIN
   select id,name from product;
END $$
delimiter ;
	

根據條件查詢一
delimiter $$
create procedure query_where(p_name varchar(200))
BEGIN
   select * from product where name=p_name;
END $$
delimiter ;

根據條件查詢二
delimiter $$
create procedure query_where2(p_name varchar(200),p_name1 varchar(200))
BEGIN
   select * from product where name=p_name or name=p_name1;
END $$
delimiter ;

修改所有cid的值
delimiter $$
CREATE PROCEDURE update_matches(in c_id integer)
BEGIN
   update product set cid=c_id;
END $$
delimiter ;

修改id大於3的cid的值
delimiter $$
CREATE PROCEDURE update_dayu(in c_id integer)
BEGIN
   update product set cid=c_id where id>3;
END $$
delimiter ;

根據name修改cid的值
delimiter $$
CREATE PROCEDURE update_cid(in c_id integer,in p_name varchar(200))
BEGIN
   update product set cid=c_id where name=p_name;
END $$
delimiter ;


2.調用存儲過程
call query_all();

單個參數調用存儲過程
call query_where('product x');
或者
set @p_in='product x';
call query_where(@p_in);

多個參數調用存儲過程
call query_where2('product x','product y');
或者
set @p_in='product x';
set @p2_in='product y';
call query_where2(@p_in,@p2_in);

call query_col();
call update_matches(1);
call update_dayu(2);
call update_cid(1,'product z');


3.刪除存儲過程
drop PROCEDURE query_all;
drop PROCEDURE query_where;
drop PROCEDURE query_col;
drop PROCEDURE update_cid;
drop procedure update_matches;
drop procedure update_dayu;

//out輸出
DELIMITER $$  
CREATE PROCEDURE demo_out_parameter(OUT p_out int)  
BEGIN 
SELECT p_out;  
SET p_out=2;  
SELECT p_out;  
END;  
$$  
DELIMITER ; 

set @p_out=1;
call demo_out_parameter(@p_out);

//inout輸入輸出
DELIMITER $$   
CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)   
BEGIN 
SELECT p_inout;  
SET p_inout=2;  
SELECT p_inout;   
END;  
$$   
DELIMITER ; 

set @p_inout=1;
call demo_inout_parameter(@p_inout);


delimiter $$
create procedure pr_test(inout id int)
begin
if(id is not null)then set id = id + 1;
else set id = 0;
end if;
select id as in_id;
end;
$$
delimiter ;

set @id=1;
call pr_test(@id);


//條件判斷
delimiter $$
create procedure pand(in p1id int,in p2id int)
begin 
select * from product where p1id>id and p2id<id;
end;
$$
delimiter ;

set @p1id=4;
set @p2id=2;
call pand(@p1id,@p2id);

//分頁查詢
DROP PROCEDURE IF EXISTS pr_pager;
CREATE PROCEDURE pr_pager(
IN p_table_name VARCHAR(1024),
IN p_fields VARCHAR(1024),
IN p_page_size INT,
IN p_page_now INT,
IN p_order_string VARCHAR(128),
IN p_where_string VARCHAR(1024),
OUT p_out_rows INT)

BEGIN
    DECLARE m_begin_row INT DEFAULT 0;
    DECLARE m_limit_string CHAR(64);

    SET m_begin_row = (p_page_now - 1) * p_page_size;
    SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size);

    SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string);
    SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string,m_limit_string);

    PREPARE count_stmt FROM @COUNT_STRING;
    EXECUTE count_stmt;
    DEALLOCATE PREPARE count_stmt;
    SET p_out_rows = @ROWS_TOTAL;

    PREPARE main_stmt FROM @MAIN_STRING;
    EXECUTE main_stmt;
    DEALLOCATE PREPARE main_stmt;
END;


//JPA持久層存儲過程查詢
delimiter $$
create procedure query_alarmtype()
BEGIN
   select * from alarmtype;
END $$
delimiter ;

//JPA持久層調用mysql存儲過程

//使用註解獲取EntityManager
@PersistenceContext
private EntityManager entityManager;

//使用createNativeQuery調用存儲過程
Query query = entityManager.createNativeQuery("{call query_alarmtype()}", Alarmtype.class);

//獲取查詢結果打印list
List<Alarmtype> list = query.getResultList();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getAlarmname());
}
System.out.println(list.size());


//創建臨時表存儲過程
delimiter $$
create procedure cTable()
BEGIN
   create temporary table aa(
    id int auto_increment,
    name varchar(50),
    primary key(id) 
   );
END $$
delimiter ;

call cTable();
//調用存儲過程cTable創建臨時表aa,然後把表zou的數據全部插入到臨時表aa中, insert into aa select * from zou;

//表名爲中文字符的table
create table 中文(
    id int auto_increment,
    name varchar(50),
    primary key(id) 
   );


drop procedure getMonthBillByid;

delimiter $$
create procedure getMonthBillByid(p_id int,p_billno varchar(100))
BEGIN
   select * from monthbill where id=p_id and billno="'"+p_billno+"'";
END $$
delimiter ;

call getMonthBillByid(153264,"457679153204");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章