mysql 存儲過程 動態參數 查詢執行結果


mysql function & procedure 學習使用小結:

1、動態sql, 即動態參數:

在存儲過程中,想要直接用表名變量做參數,動態執行sql,不能直接寫

1
2
3
4
5
6
7
create  procedure  ( $tableName char (20) )
 
BEGIN
 
select  * from  tableName;
 
END

 

 

mysql 不支持表名作為變量,這樣會直接將變量名“tableName”作為表名去查詢,解決的方法是:

1
2
3
4
5
6
7
8
9
10
11
BEGIN
 
  SET  @sql = concat( 'select * from ' , $tableName);
 
  PREPARE  stmt1 FROM  @sql;
 
  EXECUTE  stmt1;
 
  DEALLOCATE  PREPARE  stmt1;
 
END ;

 

 

2 得到動態sql, select查詢的結果:

可以直接 在sql 語句中 得到, "select * into @var" 就行了,后邊就可以直接運用該變量了。

例子:

1
2
3
4
5
6
7
SET  @sql = concat( 'select max(id) into @max_id  from ' , $tableName);
 
PREPARE  stmt1 FROM  @sql;
 
EXECUTE  stmt1;
 
DEALLOCATE  PREPARE  stmt1;

此時,@max_id 就保存了查詢結果。

 

參考鏈接:http://jonllen.javaeye.com/blog/370343 

http://topic.csdn.net/u/20100402/00/b13c3d37-2f06-48d2-99c8-697f8a75e441.html

http://hi.baidu.com/annleecn/blog/item/794e3efbf2525a809e514696.html

 

 

 

附上一個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DROP  PROCEDURE  IF EXISTS get_service_id;
DELIMITER
$$
CREATE  PROCEDURE  get_service_id
(
  IN  $tableName varchar (25),
  IN  $beginDate varchar (25)
)
 
  SET  @sql = concat( 'select id into @mainId from ' , $tableName , ' where date_time>=\"' , $beginDate, '\" order by date_time limit 1' );
  PREPARE  stmt1 FROM   @sql;
  EXECUTE  stmt1;
  DEALLOCATE  PREPARE  stmt1;
 
END ;
$$
DELIMITER
;
多思考,多總結,快樂成長!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com