暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB MySQL中用存过返回记录如何迁移

原创 由迪 2023-11-01
91

原作者:师庆栋

  • 适用范围
  • 问题概述
  • 解决方案
  • MySQL中示例语句
  • MogDB中迁移后的语句
  • 限制

适用范围

MySQL迁至MogDB

问题概述

MySQL存过中可以存在查询语句,执行后直接返回记录集,而MogDB的存过中不允许有查询语句。

解决方案

MogDB中有表函数,我们可以转为表函数

MySQL中示例语句

CREATE PROCEDURE proc_cnt_emp(p_deptno int)
BEGIN
  SELECT * FROM scott.emp WHERE deptno = p_deptno;
END;
复制

执行结果

mysql> CALL scott.proc_cnt_emp(10);
+-------+--------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
+-------+--------+-----------+------+------------+---------+------+--------+
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 | NULL |     10 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 | NULL |     10 |
+-------+--------+-----------+------+------------+---------+------+--------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
复制

MogDB中迁移后的语句

create or replace function get_emp(p_deptno number)
returns setof scott.emp
AS $$
BEGIN
  return query 
  select *
    from scott.emp
   where deptno = p_deptno;
end; $$ LANGUAGE 'plpgsql' 
复制

执行效果

stone=> CALL scott.get_emp(10);
 empno | ename  |    job    | mgr  |      hiredate       |   sal   | comm | deptno 
-------+--------+-----------+------+---------------------+---------+------+--------
  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |      |     10
  7839 | KING   | PRESIDENT |      | 1981-11-17 00:00:00 | 5000.00 |      |     10
  7934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |      |     10
(3 rows)
复制

限制

需要明确返回集合的结构,本示例中返回emp的所有列。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论