数据库mysql存储过程_[数据库]mysql存储过程的建立及使用
mysql存儲(chǔ)過(guò)程的建立及使用
建立存儲(chǔ)過(guò)程,特別是帶有參數(shù)的情況反復(fù)出錯(cuò),經(jīng)常提示“字符串格式不正確”,或者是找不到這樣,找不到那樣,經(jīng)分細(xì)心分析、分步測(cè)試,終于上傳成功,這里介紹的是APMServ5.2.6:
一,先解決mysql內(nèi)部錯(cuò)誤:
因?yàn)锳PMServ5.2.6的mysql內(nèi)部有錯(cuò),叫BUG好些,容易誤入陷阱,需要先把mysql中的proc表刪除,然后利用SQL語(yǔ)句重建一個(gè)新表,具體參閱本文附件。
二,建一個(gè)最簡(jiǎn)單的存儲(chǔ)過(guò)程以便測(cè)試是否解決了上述BUG總題:
1)================================================
簡(jiǎn)單測(cè)試建立存儲(chǔ)過(guò)程(不帶參數(shù)),測(cè)試的表自己相應(yīng)改變
---------------------------------------------------
CREATE PROCEDURE abc()
begin
insert into answertable (answer_subject_id,answer_voteway_id) values (123,456);
end;
注意:在phpMyAdmin界面中Delimiter改為//(或其它)才能操作成功上邊語(yǔ)句,因?yàn)樯线呌玫搅朔痔?hào),不能再把默認(rèn)分號(hào)作為分割符。
建立存儲(chǔ)過(guò)程后,在SQL界面測(cè)試:call answertable 然后“執(zhí)行”,
經(jīng)測(cè)試成功,再繼續(xù)以下測(cè)試。
2)==================================
單獨(dú)建立一個(gè)參數(shù)(數(shù)字類型)的存儲(chǔ)過(guò)程
-------------------------------------
CREATE PROCEDURE SaveUserAnswer1 (in xanswer_subject_id int(11))
begin
insert into answertable (answer_subject_id) values (xanswer_subject_id);
end
建成存儲(chǔ)過(guò)程后,C#中調(diào)用如下:
數(shù)據(jù)庫(kù)操作類中的一個(gè)方法:
public void SaveWithProcedure(string _subject)
{
MySqlConnection conn = new MySqlConnection(connstr)
string connstr1 = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};charset=gb2312;", "127.0.0.1", "3306", "vote", "root", "");
MySqlDataAdapter mysqldata = new MySqlDataAdapter();
DataSet dataset = new DataSet();
conn = new MySqlConnection(connstr1);
mysqldata.SelectCommand = new MySqlCommand();
mysqldata.SelectCommand.Connection = conn;
mysqldata.SelectCommand.CommandText = "SaveUserAnswer1";
mysqldata.SelectCommand.CommandType = CommandType.StoredProcedure;
MySqlParameter subject_parameter = new MySqlParameter("?xanswer_subject_id", MySqlDbType.Int32);//mysql的存儲(chǔ)過(guò)程參數(shù)是以?打頭的
subject_parameter.Value? = _subject;
mysqldata.SelectCommand.Parameters.Add(subject_parameter);
mysqldata.Fill(dataset, "SaveUserAnswer1");
}
主界面調(diào)用,實(shí)例化類(*)后調(diào)用類的方法如下:
*.SaveWithProcedure(103);
3)==================================
相應(yīng)地,測(cè)試字符類型,varchar
------------------------------------
CREATE PROCEDURE SaveUserAnswer2 (in xanswer_ip varchar(20))
begin
insert into answertable (answer_ip) values (xanswer_ip);
end
類的方法改動(dòng)下邊相應(yīng)字符參數(shù)部分,(注意:調(diào)用存儲(chǔ)名也變更了)
MySqlParameter ip_parameter = new MySqlParameter("?xanswer_ip", MySqlDbType.VarChar,20 );
ip_parameter.Value = _ip;
mysqldata.SelectCommand.Parameters.Add(ip_parameter);
主界面調(diào)用,實(shí)例化類(*)后調(diào)用類的方法:
*.SaveWithProcedure("192.168.1.3");
4)==================================
相應(yīng)地,測(cè)試時(shí)間類型,varchar
------------------------------------
CREATE PROCEDURE SaveUserAnswer3 (in xanswer_time datetime )
begin
insert into answertable (answer_time) values (xanswer_time);
end
類的方法改動(dòng)下邊相應(yīng)字符參數(shù)部分
MySqlParameter dt_parameter = new MySqlParameter("?xanswer_time", MySqlDbType.Datetime? );
dt_parameter.Value = _dt;
mysqldata.SelectCommand.Parameters.Add(dt_parameter);
主界面調(diào)用,實(shí)例化類(*)后調(diào)用類的方法:
*.SaveWithProcedure(DateTime .Now );
轉(zhuǎn)載請(qǐng)注明出處,歡迎訪問(wèn):http://www.cnblogs.com/dooroo
---附件(文摘):-------------------------------------------------------
將phpmyadmin中的mysql數(shù)據(jù)庫(kù)中的表proc刪除
執(zhí)行以下代碼重建該表
------------------------------------------------------------------------
CREATE TABLE `proc` (
`db` char(64) character set utf8 collate utf8_bin NOT NULL default '',
`name` char(64) NOT NULL default '',
`type` enum('FUNCTION','PROCEDURE') NOT NULL,
`specific_name` char(64) NOT NULL default '',
`language` enum('SQL') NOT NULL default 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL default 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL default 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL default 'DEFINER',
`param_list` blob NOT NULL,
`returns` char(64) NOT NULL default '',
`body` longblob NOT NULL,
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default '',
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL default '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','GBASE80','GBASE81','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL default '',
`comment` char(64) character set utf8 collate utf8_bin NOT NULL default '',
`character_set_client` char(32) character set utf8 collate utf8_bin default NULL,
`collation_connection` char(32) character set utf8 collate utf8_bin default NULL,
`db_collation` char(32) character set utf8 collate utf8_bin default NULL,
`body_utf8` longblob,
PRIMARY KEY (`db`,`name`,`type`)
) DEFAULT CHARSET=utf8 COMMENT='Stored Procedures'
========================================================================================
早期的該表結(jié)構(gòu)如下:
---------------------------------------------------------------------------------------
CREATE TABLE `proc` (
`db` char(64) character set utf8 collate utf8_bin NOT NULL default '',
`name` char(64) NOT NULL default '',
`type` enum('FUNCTION','PROCEDURE') NOT NULL,
`specific_name` char(64) NOT NULL default '',
`language` enum('SQL') NOT NULL default 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL default 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL default 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL default 'DEFINER',
`param_list` blob NOT NULL,
`returns` char(64) NOT NULL default '',
`body` longblob NOT NULL,
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default '',
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL default '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','GBASE323','GBASE40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL default '',
`comment` char(64) character set utf8 collate utf8_bin NOT NULL default '',
PRIMARY KEY (`db`,`name`,`type`)
) DEFAULT CHARSET=utf8 COMMENT='Stored Procedures'
總結(jié)
以上是生活随笔為你收集整理的数据库mysql存储过程_[数据库]mysql存储过程的建立及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql union 放弃索引_MyS
- 下一篇: mysql分片库分页查询_mysql数据