当前位置:首页 » 存储配置 » mysql存储过程查询实例

mysql存储过程查询实例

发布时间: 2023-12-01 06:14:35

A. mysql 如何查看某个表在哪些存储过程中用那个到了

SELECT * FROM mysql.proc

WHERE type = 'PROCEDURE'

AND specific_name = 'P_UserBetDayDetail'

AND Body LIKE '%Report_UserBetDayDetail%';

  • mysql.proc:表示查询的目标表;

  • type = 'PROCEDURE':表示查询的是存储过程;

  • specific_name = 'P_UserBetDayDetail' :表示查询的具体存储过程名称;

  • Body LIKE '%Report_UserBetDayDetail%':表示存储过程内容中包含的表。

B. 存储过程怎么在mysql查询里执行

方法一:(直接查询,比较实用,查看当前自定义的存储过程)
select `specific_name` from MySQL.proc where `db` = 'your_db_name' and `type` = 'procere'
方法二:(查看数据库里所有存储过程+内容)
show procere status;
方法三:(查看当前数据库里存储过程列表)
select specific_name from mysql.proc ;
方法四:(查看某一个存储过程的具体内容)
select body from mysql.proc where specific_name = 'your_proc_name';
查看存储过程或函数的创建代码 :
show create procere your_proc_name;
show create function your_func_name;

C. mysql存储过程实现数据查询与插入

INSERT into total_score_tmpD(
DepartmentNameEnd, StaffId,
StaffName,
CountPerHour,
SkillScoreDisCount ,
DealCount ,
ValueCount,
ValueCountDisCount
)
SELECT DepartmentName, StaffId,
StaffName,
3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*AVG(DealAvgSeconds/WaitSeconds) ,
Round(3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*avg(DealAvgSeconds/WaitSeconds)/(select Max(SunValue) From total_score_tmp33)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作技能权重'),2),
count(StaffId),
Sum(DealValue),
Round(Sum(DealValue)/(select Max(SunValue) From total_score_tmp44)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作效益权重'),2)
From deal_record
where DepartmentName like concat(DepartmentName2,'%') and DealDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;

insert into total_score_tmpc(DepartmentName , StaffId,
StaffName,
ClientNum ,
EvaluateScore ,
EvaluateScoreDisCount)
SELECT DepartmentName, StaffId,
StaffName,
count(StaffId),
Sum(EvaluatePrice),
Round((Sum(EvaluatePrice)/(select Max(SunValue) From total_score_tmp22))*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='服务评价权重'),2)
From evaluate_record
where DepartmentName like concat(DepartmentName2,'%') and EvaluateDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;

D. MySQL 存储过程,获取使用游标查询的结果集

MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。

以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息

方法一:Loop循环

调用存储过程:

方法二:While 循环

调用存储过程:

方法三:REPEAT 循环

调用存储过程:

上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:

解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。

E. mysql 存储过程

.关于MySQL的存储过程

存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

MySQL存储过程的创建

(1).格式

MySQL存储过程创建的格式:CREATE PROCEDURE过程名([过程参数[,...]])
[特性...]过程体

这里先举个例子:

  • mysql>DELIMITER//

  • mysql>CREATEPROCEDUREproc1(OUTsint)

  • ->BEGIN

  • ->SELECTCOUNT(*)INTOsFROMuser;

  • ->END

  • ->//

  • mysql>DELIMITER;


  • 注:
  • (1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

    (2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

    (3)过程体的开始与结束使用BEGIN与END进行标识。

F. MySQL怎么写存储过程查询某个表的某一条记录,并把这条记录的所有列名对应的值以json格式返回呢

给你个思路吧,既然你能问出这种问题应该是有了思路就会自己做的人,就不帮你写代码了。
首先,你确定这个表的所有字段中没有二进制内容,如果没有的话,下面这个思路你可以试试,但是如果有的话估计就需要对二进制进行特别的处理了,如果你有的话再追问吧。
思路开始:
1.如果你是对一张确定的表(提前已经知道表结构)进行这样的处理,那就查询出来一条记录,通过Mysql的字符串拼接函数CONCAT,按照JSON格式,慢慢的拼一个字符串,最后通过select这个字符串返回这个字符串就行了。
2.如果之前你并不知道,这个表的结构,甚至你根本不知道自己要处理的是那张表,那么存储过程中你需要传递一个表名进来,然后查询information_schema数据库中的COLUMNS表,从而获得这个表的具体字段信息,以及各个字段的先后顺序(为后面拼接字符串使用),剩下的就跟1中描述的思路一样了。

虽然不知道你的用处是什么,不过,以我个人的经验,这种返回JSON的方式并不可取,这样会增加数据库的负担,理论上应该是将数据出来后自己在程序中拼接。

G. 求一个详细的mysql 存储过程例子,带写日志的那种,不要也不要太简单啊。

如果想带日志只有自己写了,可以使用row_count()返回改的的行数
例如
create procere p_a1(in p_id int,in p_name varchar(20),out p_out varchar(200))
begin
declare p_cm int;
set p_cm = 0;
insert into a1(id,name) values(p_id,p_name);
select row_count() into p_cm;
if (p_cm = 1)
then
set p_out = '成功';
else
set p_out = '不成功';
end if;
end;

mysql> call p_a1(5,'KK',@a2)//
Query OK, 1 row affected (0.01 sec)
mysql> select @a2//
+--------+
| @a2 |
+--------+
| 成功 |
+--------+
1 row in set (0.01 sec)

以上来自手打,希望对你有帮助!呵呵~

热点内容
安卓怎么关闭蓝牙自动连接 发布:2024-09-08 10:58:12 浏览:11
tsm服务器修改ip地址 发布:2024-09-08 10:21:06 浏览:615
共享云源码 发布:2024-09-08 10:01:10 浏览:397
ios应用上传 发布:2024-09-08 09:39:41 浏览:441
ios储存密码哪里看 发布:2024-09-08 09:30:02 浏览:874
opensslcmake编译 发布:2024-09-08 09:08:48 浏览:653
linux下ntp服务器搭建 发布:2024-09-08 08:26:46 浏览:744
db2新建数据库 发布:2024-09-08 08:10:19 浏览:173
频率计源码 发布:2024-09-08 07:40:26 浏览:780
奥迪a6哪个配置带后排加热 发布:2024-09-08 07:06:32 浏览:101