MySQL預存程序使用,mysql預存程序

來源:互聯網
上載者:User

MySQL預存程序使用,mysql預存程序
1. 目標

掌握如何建立預存程序


2. 文法

CREATE PROCEDURE sp_name([proc_parameter])

[characteristics...] routine_body


3. 說明
  • CREATE PROCEDURE為用來建立預存程序的關鍵字;
  • sp_name為預存程序的名稱;
  • proc_parameter為指定預存程序的參數列表,參數列表的形式:[IN | OUT | INOUT] param_name type
  • characteristics指定預存程序的特性,可以有以下幾種取值方式:
  • routine_body是SQL代碼內容,可以用BEGIN...END來表示SQL代碼的開始與結束。


4. 樣本

1) 建立樣本資料庫

create database hr;use hr;

2) 建立樣本用到的表並插入範例資料

create table employees(employee_id int(11) primary key not null auto_increment,employee_name varchar(50) not null,employee_sex varchar(10) default '男',hire_date datetime not null default current_timestamp,employee_mgr int(11),employee_salary float default 3000,department_id int(11));

insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('David Tian','男',10,7500,1);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Black Xie','男',10,6600,1);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Moses Wang','男',10,4300,1);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Rena Ruan','女',10,5300,1);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Sunshine Ma','女',10,6500,2);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Scott Gao','男',10,9500,2);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Warren Si','男',10,7800,2);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Kaishen Yang','男',10,9500,3);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Simon Song','男',10,5500,3);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Brown Guan','男',10,5000,3);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Eleven Chen','女',10,3500,2);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Cherry Zhou','女',10,5500,4);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Klause He','男',10,4500,5);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Maven Ma','男',10,4500,6);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Stephani Wang','女',10,5500,7);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Jerry Guo','男',10,8500,1);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Gerardo Garza','男',10,25000,8);insert into employees(employee_name,employee_sex,employee_mgr,employee_salary,department_id) values ('Derek Wu','男',10,5500,5);

3) 查看插入的範例資料

select * from employees;


4) 建立計算平均工資的預存程序

DELIMITER //create procedure calculate_emp_sal_avg_p()beginselect AVG(employee_salary) as average_salaryfrom employees;end//DELIMITER ;

說明

  • DELIMETER //:該語句作用是將MySQL的結果結束符設定為//,因為MySQL預設的語句結束符為分號";",為了避免與預存程序中SQL語句的結束符相衝突,需要使用DELIMETER改變預存程序的結束符,並以"END //" 結束預存程序。
  • 預存程序定義完畢以後再使用"DELIMETER ; "恢複預設結束符。
  • DELIMETER也可以指定其它符號為結束符。


5. 調用預存程序

預存程序是通過CALL語句進行調用的,文法如下:

  • CALL sp_name([parameter[,...]])

CALL語句調用一個先前用CREATE PROCEDURE建立的預存程序,其中sp_name為預存程序名稱,parameter為預存程序參數。

CALL calculate_emp_sal_avg_p();


6. 查看預存程序

1) SHOW STATUS 語句查看預存程序

文法

  • SHOW PROCEDURE STATUS [LIKE 'pattern']

這個語句是一個MySQL的擴充,它返回子程式的特徵,如資料庫、名字、類型、建立者及建立日期和修改日期。

LIKE語句表示匹配預存程序的名稱;



2) SHOW CREATE 語句查看預存程序定義

文法

  • SHOW CREATE PROCEDURE sp_name

這個語句是一個MySQL的擴充,類似於SHOW CREATE TABLE,它返回一個可用來重新建立已命名預存程序的確切字串。


3) 從information_schema.Routines表中查看預存程序

文法

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='sp_name';

  • ROUTINE_NAME欄位中儲存的是預存程序或者函數的名稱;
  • sp_name指預存程序或函數名稱;


如果您們在嘗試的過程中遇到什麼問題或者My Code有錯誤的地方,請給予指正,非常感謝!

連絡方式:david.louis.tian@outlook.com

著作權@:轉載請標明出處!



mysql 預存程序怎調用?

php調用mysql預存程序和函數的方法
預存程序和函數是MySql5.0剛剛引入的。關於這方面的操作在PHP裡面沒有直接的支援。但是由於Mysql PHP API的設計,使得我們可以在以前的PHP版本中的mysql php api中支援預存程序和函數的調用。

在php中調用預存程序和函數。

1。調用預存程序的方法。

a。如果預存程序有 IN/INOUT參數,聲明一個變數,輸入參數給預存程序,該變數是一對,

一個php變數(也可以不必,只是沒有php變數時,沒有辦法進行動態輸入),一個Mysql

變數。

b。如果預存程序有OUT變數,聲明一個Mysql變數。

mysql變數的聲明比較特殊,必須讓mysql伺服器知道此變數的存在,其實也就是執行一條mysql語句。

入set @mysqlvar=$phpvar ;

c。使用mysql_query()/mysql_db_query()執行mysql 變數聲明語句。

mysql_query("set @mysqlvar=$pbpvar");

這樣,在mysql伺服器裡面就有一個變數,@mysqlar。如果是IN參數,那麼其值可以由phpar傳入。

d。 如果是預存程序。

1。執行 call procedure()語句。

也就是mysql_query("call proceduer([var1]...)");

2. 如果有傳回值,執行select @ar,返回執行結果。

mysql_query("select @var)"

接下來的操作就和php執行一般的mysql語句一樣了。可以通過mydql_fetch_row()等函數獲得結果。

如果時函數。 直接執行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];...餘下全文>>
 
MySQL裡面sql語句調用預存程序,該怎寫?

call sp_add();
是不是你已定義流程有問題吧,並沒有指出返回結果來
像我這樣是可以的:

CREATE PROCEDURE sp_add(a int, b int,out c int)
begin

set c=a+ b;

end;
調用過程:
call sp_add (1,2,@a);
select @a;
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.