MySQLストレージ・プロシージャとコンポーネント管理


この文は更新されますので、次第に改善されることを期待してください.
目次
きおくてつづき
ストレージ・プロシージャの基礎と原理
ストアド・プロシージャ・インスタンスとメソッド・コール
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
索引の新規作成と変更
ビューの作成または変更
テーブルとビューの削除
きおくてつづき
ストレージ・プロシージャの基礎と原理
続行...
ストアド・プロシージャ・インスタンスとメソッド・コール
続行...
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
/* 
 *             :
 *           ,          ,     ,   。
 *             
 * 
 *     :
 * p_dbname :      
 * p_tablename :    
 * p_filedname :      
 * p_filedtype :       : DATE , VARCHAR(50)
 * p_comment :       
 * 
 *   :        xxx_db tablename      sys_create_date    date,   :
 * call proc_add_column('xxx_db','tablename','sys_create_date','date','      ')
 */
DROP PROCEDURE if EXISTS proc_add_column;

CREATE PROCEDURE proc_add_column(
    IN p_dbname VARCHAR(50),
    IN p_tablename VARCHAR(100),
    IN p_filedname VARCHAR(100),
    IN p_filedtype VARCHAR(100),
    IN p_comment VARCHAR(200)
)
BEGIN
   SET @str=CONCAT('ALTER TABLE ',p_tablename,' ADD ',p_filedname,' ',p_filedtype,' COMMENT ',"'",p_comment,"'");

   SET @cnt = 0;
   SELECT count(*) INTO @cnt	FROM	information_schema.COLUMNS
     WHERE		table_schema = p_dbname	AND table_name = p_tablename	AND column_name=p_filedname;

   IF (@cnt = 0) THEN
		 PREPARE stmt	FROM	@str ;
     EXECUTE stmt ;
	 END	IF;
   
END


/* 
 *             :
 *           ,         ,     ,    。
 *              
 * 
 *     :
 * p_dbname :      
 * p_tablename :    
 * p_filedname :      
 * p_filedtype :       : DATE , VARCHAR(50)
 * p_comment :       
 * 
 *   :        xxx_db tablename      sys_create_date    date,   :
 * call proc_modify_column('xxx_db','tablename','sys_create_date','date','      ')
 */
DROP PROCEDURE if EXISTS proc_modify_column;

CREATE PROCEDURE proc_modify_column(
    IN p_dbname VARCHAR(50),
    IN p_tablename VARCHAR(100),
    IN p_filedname VARCHAR(100),
    IN p_filedtype VARCHAR(100),
    IN p_comment VARCHAR(200)
)
BEGIN
   SET @str=CONCAT('ALTER TABLE ',p_tablename,' MODIFY ',p_filedname,' ',p_filedtype,' COMMENT ',"'",p_comment,"'");

   SET @cnt = 0;
   SELECT count(*) INTO @cnt	FROM	information_schema.COLUMNS
     WHERE		table_schema = p_dbname	AND table_name = p_tablename	AND column_name=p_filedname;

   IF (@cnt > 0) THEN
		 PREPARE stmt	FROM	@str ;
     EXECUTE stmt ;
	 END	IF;
   
END

索引の新規作成と変更
/* 
 *            :
 *           ,          ,     ,   。
 *         ,                         
 * 
 *     :
 * p_dbname :      
 * p_tablename :    
 * p_idxname :     
 * p_index :        ,    name(name) 
 * 
 *   :        xxx_db tablename      column1 column2      idx_c1c2,   :
 * call proc_add_index('xxx_db','tablename','idx_c1c2','idx_c1c2(column1,column2)')
 */
DROP PROCEDURE IF EXISTS proc_add_index;


CREATE PROCEDURE proc_add_index (
	IN p_dbname VARCHAR (200),
	IN p_tablename VARCHAR (200),
	IN p_idxname VARCHAR (200),
	IN p_index VARCHAR (200)
)
BEGIN
	SET @str = concat(' ALTER TABLE ',p_tablename,' ADD INDEX ',p_index	) ; 
  SET @cnt=0;
  SELECT count(*) INTO @cnt	FROM	information_schema.statistics	
    WHERE		TABLE_SCHEMA = p_dbname	AND table_name = p_tablename  AND index_name = p_idxname ;

	IF (@cnt = 0) THEN
		PREPARE stmt	FROM	@str ;
    EXECUTE stmt ;
	END	IF;

END ;


/* 
 *            :
 *           ,         ,     ,    。
 *         ,                     
 * 
 *     :
 * p_dbname :      
 * p_tablename :    
 * p_idxname :     
 * p_index :        ,    name(name) 
 * 
 *   :        xxx_db tablename      column1 column2      idx_c1c2,   :
 * call proc_modify_index('xxx_db','tablename','idx_c1c2','idx_c1c2(column1,column2)')
 */
DROP PROCEDURE IF EXISTS proc_modify_index;


CREATE PROCEDURE proc_modify_index (
	IN p_dbname VARCHAR (200),
	IN p_tablename VARCHAR (200),
	IN p_idxname VARCHAR (200),
	IN p_index VARCHAR (200)
)
BEGIN
	SET @str = concat(' ALTER TABLE ',p_tablename,' MODIFY INDEX ',p_index	) ; 
  SET @cnt=0;
  SELECT count(*) INTO @cnt	FROM	information_schema.statistics	
    WHERE		TABLE_SCHEMA = p_dbname	AND table_name = p_tablename  AND index_name = p_idxname ;

	IF (@cnt = 0) THEN
		PREPARE stmt	FROM	@str ;
    EXECUTE stmt ;
	END	IF;

END ;

ビューの作成または変更
/* 
 *               :
 * 
 *     :
 * p_dbname :      
 * p_viewname :      
 * p_sqlquery :         
 * 
 *   :     tablename      a、b、c......,   :
 * call proc_add_or_modify_view('tablename','SELECT a,b,c FROM tablename')
 */
DROP PROCEDURE IF EXISTS proc_create_replace_view;


CREATE PROCEDURE proc_create_replace_view (
	IN p_viewname VARCHAR (200),
	IN p_sqlquery VARCHAR (1000)
)
BEGIN
	SET @str = concat('CREATE OR REPLACE  VIEW ',p_viewname,' AS ',p_sqlquery) ; 
  PREPARE stmt	FROM	@str;
  EXECUTE stmt ;

END ;

テーブルとビューの削除
/* 
 *           :
 * 
 *     :
 * p_dbname :      
 * p_tablename :    
 * 
 *   :call proc_delete_table('xxx_db','tablename')
 */
DROP PROCEDURE if EXISTS proc_delete_table;

CREATE PROCEDURE proc_delete_table(
    IN p_dbname VARCHAR(50),
    IN p_tablename VARCHAR(100)
)
BEGIN
   SET @str=CONCAT("DROP TABLE IF EXISTS `",p_tablename,"`");

   SET @cnt = 0;
   SELECT count(*) INTO @cnt	FROM	information_schema.`TABLES`
         WHERE		table_schema = p_dbname	AND table_name = p_tablename;
   IF (@cnt > 0) THEN
		 PREPARE stmt	FROM	@str ;
     EXECUTE stmt ;
	 END	IF;
   
END


/* 
 *             :
 * 
 *     :
 * p_dbname :      
 * p_viewname :      
 * 
 *   :call proc_delete_view('xxx_db','tablename')
 */
DROP PROCEDURE if EXISTS proc_delete_view;

CREATE PROCEDURE proc_delete_view(
    IN p_dbname VARCHAR(50),
    IN p_viewname VARCHAR(100)
)
BEGIN
   SET @str=CONCAT("DROP VIEW IF EXISTS `",p_viewname,"`");

   SET @cnt = 0;
   SELECT count(*) INTO @cnt	FROM	information_schema.VIEWS
         WHERE		table_schema = p_dbname	AND table_name = p_viewname;
   IF (@cnt > 0) THEN
		 PREPARE stmt	FROM	@str ;
     EXECUTE stmt ;
	 END	IF;
   
END