MySQLストレージ・プロシージャとコンポーネント管理
6349 ワード
この文は更新されますので、次第に改善されることを期待してください.
目次
きおくてつづき
ストレージ・プロシージャの基礎と原理
ストアド・プロシージャ・インスタンスとメソッド・コール
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
索引の新規作成と変更
ビューの作成または変更
テーブルとビューの削除
きおくてつづき
ストレージ・プロシージャの基礎と原理
続行...
ストアド・プロシージャ・インスタンスとメソッド・コール
続行...
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
索引の新規作成と変更
ビューの作成または変更
テーブルとビューの削除
目次
きおくてつづき
ストレージ・プロシージャの基礎と原理
ストアド・プロシージャ・インスタンスとメソッド・コール
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
索引の新規作成と変更
ビューの作成または変更
テーブルとビューの削除
きおくてつづき
ストレージ・プロシージャの基礎と原理
続行...
ストアド・プロシージャ・インスタンスとメソッド・コール
続行...
ストアド・プロシージャ・コンポーネント管理
フィールドの新規作成と変更
/*
* :
* , , , 。
*
*
* :
* 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