儲存過程中SELECT INTO的使用

2021-09-08 04:37:53 字數 3952 閱讀 2531

在mysql儲存過程中使用select …into語句為變數賦值:

用來將查詢返回的一行的各個列值儲存到區域性變數中。

要求:查詢的結果集中只能有1行。

select col_name[,...] into var_name[,...] table_expr

使用select …into語句在資料庫中進行查詢,並將得到的結果賦值給變數。

①col_name:要從資料庫中查詢的列欄位名;

②var_name:變數名,列欄位名按照在列清單和變數清單中的位置對應,將查詢得到的值賦給對應位置的變數;

③table_expr:select語句中的其餘部分,包括可選的from子句和where子句。

1、單一變數賦值

例1:建立過程,得到指定球員的所有罰款總額

mysql>delimiter $$

mysql>create procedure total_penalties_player(

->   in p_playerno int

, ->   out total_penalties dec(8,2

)) ->begin

->   select

sum(amount)

->into total_penalties

->   from

penalties

->   where playerno=p_playerno;

->end

$$mysql>delimiter ;

mysql> call total_penalties_player(27

,@total);

mysql> select

@total;

+--------+

| @total |

+--------+

| 175.00 |

+--------+

2、多變數賦值

例2:建立過程,得到乙個給定球員的位址

mysql>delimiter $$

mysql>create procedure get_address(

->in p_playerno smallint,

-> out p_street varchar(30

), -> out p_houseno varchar(4

), -> out p_town varchar(30

), -> out p_postcode varchar(6

))

->begin

->select street, houseno, town, postcode

->into p_street, p_houseno, p_town, p_postcode

->from players

-> where playerno =p_playerno;

->end$$

mysql>delimiter ;

mysql> call get_address(27

,@s,@h,@t,@p);

mysql> select

@s,@h,@t,@p;

+------------+------+--------+--------+

| @s | @h | @t | @p |

+------------+------+--------+--------+

| long drive | 804 | eltham | 8457dk |

+------------+------+--------+--------+

注意:

在使用select …into語句時,變數名和資料表中的欄位名不能相同,否則會出錯。

3、拓展:

select into outfile 用法、load data infile 用法

mysql> create table test_1(id int auto_increment primary key not null,name varchar(20) not null

);query ok,

0 rows affected (0.21

sec)

mysql> insert into test_1(name) values('

zhangsan

'),('

lisi');

query ok,

2 rows affected (0.03

sec)

records:

2 duplicates: 0 warnings: 0

mysql> select * from

test_1;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

+----+----------+

2 rows in

set (0.01

sec)

mysql> select * into outfile '

/tmp/result.txt

' -> fields terminated by '

,' optionally enclosed by '"'

-> lines terminated by '\n'

-> from

test_1;

query ok,

2 rows affected (0.05

sec)

[root@mysqlserver tmp]# cat result.txt

1,"zhangsan"

2,"lisi"

mysql>create table test_2 like test_1;  #建test_2複製test_1表結構

query ok,

0 rows affected (0.18

sec)

mysql> load data infile '

/tmp/result.txt

'into table test_2;

error

1265 (01000): data truncated for column '

id' at row 1

mysql> load data infile '

/tmp/result.txt

'into table test_2

-> fields terminated by '

,' optionally enclosed by '"'

-> lines terminated by '\n'

;query ok,

2 rows affected (0.01

sec)

records:

2 deleted: 0 skipped: 0 warnings: 0

mysql> select * from

test_2;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

+----+----------+

2 rows in

set (0.00 sec)

注意:如果匯出時用到了fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'語句,那麼loda時也要加上同樣的分隔限制語句。還要注意編碼問題。

儲存過程中SELECT INTO的使用

在mysql儲存過程中使用select into語句為變數賦值 用來將查詢返回的一行的各個列值儲存到區域性變數中。查詢的結果集中只能有1行。select col name into var name table expr使用select into語句在資料庫中進行查詢,並將得到的結果賦值給變數。co...

儲存過程中呼叫儲存過程

use northwind go 儲存過程1 功能 通過員工firstname inputempfirstname 獲得 員工id outid if exists select name from sysobjects where name p getempleeidbyname and type ...

儲存過程中事務操作

資料庫中事務主要應用在多條語句的更新操作 插入 修改 刪除 可以保證資料的完整性與正確性。使用原則為盡可能少的影響資料,以免產生死鎖或者占用資源。在儲存過程中如果中間操作有非嚴重的錯誤資訊執行不會中斷,會繼續執行並返回相應結果。但是程式呼叫的話如果不是用 try catch形式則會報錯,出現黃頁。需...