【问题标题】:How to convert Oracle stored procedure to MySQL如何将 Oracle 存储过程转换为 MySQL
【发布时间】:2020-09-28 09:22:01
【问题描述】:

我在 oracle 中做了这些 SQL 语句

create or replace procedure teacherlist(lists out SYS_REFCURSOR )
is 
begin
open lists for 
select teacherid,teachername,status,email,contact,address
from teacher;
end;

但现在我必须在 MySQL 中为 PHPMyAdmin 执行相同的存储过程,我是这样做的:

DELIMITER $$
CREATE PROCEDURE `teacherlist`(OUT `v_stuid` VARCHAR(10), OUT `v_teachername` VARCHAR(100), OUT `v_status` VARCHAR(20), OUT `v_email` VARCHAR(40), OUT `v_contact` VARCHAR(20), OUT `v_address` VARCHAR(100))
begin
DECLARE v_teacherid varchar(10);
DECLARE v_teachername varchar(100);
DECLARE v_status varchar(20);
DECLARE v_email varchar(40);
DECLARE v_contact varchar(20);
DECLARE v_address varchar(100);
DECLARE My_Cursor CURSOR FOR 
select teacherid,teachername,status,email,contact,address
from teacher;
OPEN My_Cursor;
FETCH My_Cursor INTO v_teacherid,v_teachername,v_status,v_email,v_contact,v_address;
CLOSE My_Cursor;
END$$
DELIMITER ;

我不确定是对还是错,因为当我执行程序时它没有给我任何输出。

【问题讨论】:

  • 不要对参数和声明的变量使用相同的名称。(反引号不会使它们不同..)
  • 不是 ORACLE 这应该怎么做?
  • @P.Salmon 它应该从表老师那里获取数据并显示输出,但我不太确定这一点,因为我还在学习

标签: mysql oracle stored-procedures converters


【解决方案1】:

在 MySQL 中没有直接等效的 Oracle 数据库 REF CURSOR。

最简单的解决方案可能是这样的:

DELIMITER $$
CREATE  PROCEDURE teacherlist()
BEGIN
select teacherid,teachername,status,email,contact,address
from teacher;
END$$
DELIMITER ;

并使用call语句来使用结果集。

【讨论】:

  • 它有效,非常感谢。可能我不是很了解如何正确使用游标,所以当我在其他人的问题中看到 MySQL 编码中的游标时,我只是直言不讳。
猜你喜欢
  • 2021-08-17
  • 2020-10-12
  • 2013-10-10
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2022-07-06
  • 1970-01-01
相关资源
最近更新 更多