`
itace
  • 浏览: 180556 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql5.x函数和存储过程

阅读更多

     mysql5.x存储过程和函数(尤其是)特性,创建方式更改,差不多是为了排除分号影响(个人笔记,仅供自己参考)

 

  详见changes:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

 

   CREATE PROCEDURE and CREATE FUNCTION Syntax:

  

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

 

    Official Demo1:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

 

   Official Demo2:

    

mysql> CREATE FUNCTION hello (s CHAR(20))
mysql> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)

    

    User Demo1:

    

    

An example using varchar and character sets

delimiter //
CREATE FUNCTION db.fnfullname ( id smallint(5) unsigned ) RETURNS varchar(160) CHARACTER SET utf8
COMMENT 'Returns the full name of person in db.people table referenced by id where FirstName and FamilyName are not null but MiddleName may be null'
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE fulname varchar(160) CHARACTER SET utf8;
SELECT CONCAT_WS(' ', db.people.FirstName, db.people.MiddleName, db.people.FamilyName) into fulname from db.people where db.people.id=id;
RETURN fulname;
END
//

delimiter ;

 

    User Demo2:

    

Sample for Procedure with insert to trace error logs

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_error_log`(
`error_level` int(11),
`error_level_name` varchar(512),
`error_message` longtext,
`error_file` text,
`error_line` int(11),
`error_context` longtext,
`error_query_string` longtext,
`error_time` text ,
`user_id` int(11),
`post_data` longtext,
`user_msg` text)
BEGIN
INSERT INTO tbl_error_log(error_level, error_level_name, error_message, error_file,error_line, error_context,error_query_string,error_time, user_id, post_data, user_msg)
values(error_level, error_level_name, error_message, error_file,error_line, error_context,error_query_string, error_time, user_id, post_data, user_msg);
END$$

 

    User Demo3:

    

I didn't find a lot of examples for MySQL Stored Procs so I thought I'd add one. This one uses a temp table and iterates through the rows. It was a pain in the butt to debug in phpMyAdmin. There was a lot of dropping and re-creating.

############################

delimiter $$

create procedure assignKeywords( currCID int )
begin

declare currKeywordID int;
declare currTitle varchar(255);
declare currKeyword varchar(255);
declare currContent text;
declare keywordsCSV varchar(255);

-- get content
select id, title, content from content where id = currCID into currCID, currTitle, currContent;

-- create the keywords temp table to iterate
drop temporary table if exists keywords_temp;
create temporary table keywords_temp as
select id, display_val from vars where name = 'KEYWORDS' order by display_order desc;

set keywordsCSV = ",";
while (select count(*) from keywords_temp) > 0
do

select id, display_val from keywords_temp limit 1 into currKeywordID, currKeyword;

-- search the content for current keyword
if instr(currContent,currKeyword) > 0 || instr(currTitle,currKeyword) > 0
then
set keywordsCSV = CONCAT(keywordsCSV, currKeywordID);
set keywordsCSV = CONCAT(keywordsCSV, ",");
end if;

delete from keywords_temp where id = currKeywordID;

end while;

drop temporary table if exists keywords_temp;

update content set keywords = keywordsCSV where id = currCID;

end;

###############################

  

    User Demo4:

    

CREATE TABLE IF NOT EXIST Osob
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (P_Id)
);
CREATE TABLE uzytkownicy2
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) References Osob(P_Id)
);
-----------------------------------
INSERT INTO `osob`(`O_Id`, `OrderNo`, `P_Id`) VALUES (1,2,3)
INSERT INTO `uzytkownicy2`(`O_Id`, `OrderNo`, `P_Id`) VALUES (1,2,3)
-----------------------------------
DELIMITER $$
CREATE PROCEDURE wam2(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM trenowanie_mysql.osob;
END$$
DELIMITER ;
------------------------------------
CALL wam2(@a);

 

 

 

分享到:
评论

相关推荐

    mysql 5X.chm

    这个 CHM 文件还可能包含实际示例、最佳实践和常见问题解答,使得用户能够快速理解和解决他们在使用 MySQL 5.x 过程中遇到的问题。配合 "readme.txt" 文件,可能包含额外的安装或使用提示,以及对文档结构和内容的...

    MySql.Data.dll各个版本

    可能增加了对更复杂的查询和存储过程的支持,以及对MySQL Server的新功能,如JSON字段、窗口函数等。同时,可能会改进错误处理和日志记录,便于调试和问题定位。 6. 版本6.x: 最终到达6.x版本的MySQL.Data.dll...

    azkaban-3.84.4改mysql驱动为8.x版本

    6. **性能优化**: MySQL 8.x引入了许多性能改进和新特性,如InnoDB存储引擎的增强、JSON支持、窗口函数等。利用这些新功能可能需要修改Azkaban的工作流逻辑。不过,这通常不是驱动升级的一部分,而是后续优化工作的...

    mysql-connect-java-5.1.41 mysql5版本和8版本的连接包!

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其稳定性和性能使其在Web开发、企业级应用以及各种数据存储解决方案中广泛使用。对于Java开发者来说,能够连接MySQL数据库是非常关键的技能。本压缩包提供了针对...

    mysql源码(mysql-8.1.0.tar.gz)

    MySQL 8.x系列带来了许多改进,特别是针对安全性、性能和易用性。在源码层面,我们可以深入了解其内部机制,包括查询优化器、存储引擎、事务处理、并发控制等核心模块。 1. **查询优化器**:MySQL的查询优化器是...

    mysql-5.7.44-linux-glibc2.12-x86-64.tar.gz

    - **InnoDB存储引擎优化**:在5.7版本中,InnoDB引擎得到了显著的性能提升,包括更快的索引插入和查询速度。 - **查询优化器改进**:查询优化器引入了更智能的策略,能更准确地估计查询执行计划的成本,从而提高...

    MySQL驱动 5.7 ,8.2

    MySQL 8.2是MySQL数据库的后续版本,带来了更多改进和新功能,比如更强大的窗口函数、更好的性能、改进的加密和安全性、以及对InnoDB存储引擎的增强。`mysql-connector-java-8.0.22.zip`包含的是适用于MySQL 8.2的...

    mysql驱动(mysql-connector-java-5.1.41.jar+mysql-connector-java-8.0.17.jar)

    MySQL 8.0引入了许多新特性和性能优化,包括JSON字段支持、窗口函数、增强的行级锁定以及改进的查询优化器。对应的驱动也进行了升级,以更好地利用这些新特性,提高数据处理效率和应用性能。此外,它还提供了更好的...

    mysql 5.6.x for windows client dll

    总的来说,MySQL 5.6.x for Windows Client DLL是Windows开发人员连接MySQL服务器的关键工具,尤其对于使用Delphi和Lazarus的用户来说,它可以方便地集成到他们的应用中,实现高效的数据管理功能。无论是开发新的...

    mysql-server-mysql-8.3.0.tar.gz

    MySQL是世界上最受欢迎的开源数据库系统之一,主要用于存储和管理数据。`mysql-server-mysql-8.3.0.tar.gz` 文件是一个包含MySQL服务器的源代码压缩包,版本为8.3.0。这个版本可能包含了最新的特性和性能优化,使得...

    mysql-connector-java-8.0.31-jar包

    这包括对InnoDB存储引擎、JSON数据类型、窗口函数和Common Table Expressions (CTE)等新特性的支持。 6. **错误处理和诊断**:当数据库操作遇到问题时,Connector/J会提供详细的错误信息和异常处理,帮助开发者快速...

    mysql8.0(免安装版)(mysql-8.0.33-winx64.zip,VC-redist.x64.exe)

    在这个免安装版中,我们有`mysql-8.0.33-winx64.zip`和`VC_redist.x64.exe`两个文件。下面我们将详细探讨这两个文件以及MySQL 8.0的一些关键知识点。 `mysql-8.0.33-winx64.zip`文件包含的是MySQL 8.0.33的Windows ...

    MySQL:grant_语法详解(MySQL_5.X)

    包括对数据库结构的操作权限,如创建表(CREATE)、修改表(ALTER)、删除表(DROP)、创建索引(INDEX)、创建视图(CREATE VIEW)、显示视图源代码(SHOW VIEW)、操作存储过程和函数(EXECUTE)等。 二、grant...

    各种版本的mysql.data.dll

    MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能强大且灵活,被众多企业和开发者用于存储和处理数据。`mysql.data.dll` 文件是 MySQL 客户端连接库的一部分,它包含了一系列函数,允许应用程序与 ...

    mysql-5.7.36-winx64.zip

    4. **增强的SQL语法**:MySQL 5.7扩展了SQL语法,如窗口函数,这使得在处理聚合查询和分组数据时更加灵活。 5. **安全增强**:包括更强的密码加密策略,更严格的安全配置选项,以及改进的审计日志功能,确保了...

    mysql常用坐标系转换函数.docx

    这些函数提供了在MySQL数据库环境中进行坐标转换的能力,使得存储和查询地理位置数据变得更加便捷。然而,需要注意的是,这些转换函数可能会有一定的误差,因为它们可能并不包含完整的加密算法。 总之,`84togcj2...

    Mysql 个版本jar 包

    例如,从5.x到8.x的升级,MySQL引入了InnoDB存储引擎的增强,支持窗口函数,以及更严格的SQL标准合规性等。因此,选择适合项目需求的特定版本的jar包至关重要。 在Java项目中,添加MySQL jar包的过程通常包括以下...

    MySQL 5.1参考手册

    5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. ...

    mysql-5.7.32-linux-glibc-2.28-aarch64.tar.gz

    在使用MySQL的过程中,开发者和管理员需要了解SQL语法、存储引擎(如InnoDB和MyISAM)、事务处理、索引、视图、触发器、存储过程等核心概念。同时,了解如何使用工具如mysqldump进行数据导入导出,以及如何使用MySQL...

    MySQL8.4.0 LTS(mysql-8.4.0.zip)

    2. **窗口函数**:MySQL 8.x 引入了 SQL 标准的窗口函数,允许用户在聚合操作中执行更复杂的计算,如排名、行号分配和累计求和。 3. **JSON 函数增强**:MySQL 对 JSON 数据类型的支持进一步加强,添加了更多处理 ...

Global site tag (gtag.js) - Google Analytics