ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MYSQL存储过程定义案例

2021-01-29 09:30:05  阅读:192  来源: 互联网

标签:存储 VARCHAR person -- tableName stmt 案例 MYSQL TABLE


DROP PROCEDURE IF EXISTS TRYADDTABLE;

delimiter //
CREATE PROCEDURE TRYADDTABLE (IN tableName VARCHAR(20),IN createTableSql VARCHAR(1000))
BEGIN
	DECLARE tableCount INT;
  SELECT COUNT(*) INTO tableCount FROM information_schema.TABLES WHERE TABLE_NAME = tableName;	
	IF(tableCount = 0) THEN
	  -- @表示全局变量 相当于php $ 拼接赋值 INTO 必须要用全局变量不然语句会报错
		SET @create_sql = createTableSql;
		-- 预处理需要执行的动态SQL,其中stmt是一个变量
		PREPARE stmt FROM @create_sql;
		-- 执行SQL语句
    EXECUTE stmt;
		-- 释放掉预处理段
		deallocate prepare stmt;
	END IF;
END //
delimiter ;

CALL TRYADDTABLE('person','CREATE TABLE person (
person_id INT NOT NULL PRIMARY KEY,
fname VARCHAR(40) NULL,
lname VARCHAR(40) NULL,
created TIMESTAMP
);');

SELECT * FROM person;

DROP PROCEDURE IF EXISTS TRYADDTABCOLUMN;

delimiter //
CREATE PROCEDURE TRYADDTABCOLUMN (IN tableName VARCHAR(50),IN colName VARCHAR(20),IN colType VARCHAR(20))
BEGIN
	DECLARE colCount INT;
  SELECT COUNT(*) INTO colCount FROM information_schema.COLUMNS WHERE TABLE_NAME = tableName AND COLUMN_NAME = colName;	
	IF(colCount = 1) THEN
	  -- @表示全局变量 相当于php $ 拼接赋值 INTO 必须要用全局变量不然语句会报错
		SET @drop_sql = CONCAT('ALTER TABLE ',tableName,' DROP COLUMN ',colName,';');
		-- 预处理需要执行的动态SQL,其中stmt是一个变量
		PREPARE stmt FROM @drop_sql;
		-- 执行SQL语句
    EXECUTE stmt;
		-- 释放掉预处理段
		deallocate prepare stmt;	
	END IF;
		-- @表示全局变量 相当于php $ 拼接赋值 INTO 必须要用全局变量不然语句会报错
	SET @add_sql = CONCAT('ALTER TABLE ',tableName,' ADD COLUMN ',colName,' ',colType,';');
	-- 预处理需要执行的动态SQL,其中stmt是一个变量
	PREPARE stmt FROM @add_sql;
	-- 执行SQL语句
	EXECUTE stmt;
	-- 释放掉预处理段
	deallocate prepare stmt;	
END //
delimiter ;

CALL TRYADDTABCOLUMN('person','fname','VARCHAR(20)');
CALL TRYADDTABCOLUMN('person','updated','TIMESTAMP');

SHOW CREATE TABLE person;

标签:存储,VARCHAR,person,--,tableName,stmt,案例,MYSQL,TABLE
来源: https://blog.csdn.net/m0_37607945/article/details/113342348

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有