创建包中的多态性(MariaDB 10.6.4)

lkaoscv7  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(134)

在MariaDB的CREATE PACKAGECREATE PACKAGE BODY语句中使用多态性是否可能(或者是否会?)?
这是由于一些软件包从Oracle迁移到MariaDB。我必须重新编码一些部分,但我不能更改名称(即,我应该更改对要迁移的软件其余部分中新命名过程的每个调用)。
示例(已调用set @@sql_mode):

create package P as
    procedure X (par1 INT)
    procedure X (par2 VARCHAR, par3 INT)
    function F (par1 INT) return INT
    function F (par2 VARCHAR) return VARCHAR
end;

当然,此时语句执行失败,并出现错误:

ERROR 1304 (42000) at line 3 in file: 'filename.sql': PROCEDURE P.X already exists

谢谢大家。

Configuration: Oracle Virtualbox - Mariadb 10.6.4, Xubuntu 20.4.3 LTS
jhdbpxl9

jhdbpxl91#

SHOW CREATE PACKAGE BODY employee_tools\G

***************************1. row***************************

        Package body: employee_tools
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
 Create Package Body: CREATE DEFINER="root"@"localhost" PACKAGE BODY "employee_tools" AS

  stdRaiseAmount DECIMAL(10,2):=500;

  PROCEDURE log (eid INT, ecmnt TEXT) AS
  BEGIN
    INSERT INTO employee_log (id, cmnt) VALUES (eid, ecmnt);
  END;

  PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2)) AS
    eid INT;
  BEGIN
    INSERT INTO employee (name, salary) VALUES (ename, esalary);
    eid:= last_insert_id();
    log(eid, 'hire ' || ename);
  END;

  FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2) AS
    nSalary DECIMAL(10,2);
  BEGIN
    SELECT salary INTO nSalary FROM employee WHERE id=eid;
    log(eid, 'getSalary id=' || eid || ' salary=' || nSalary);
    RETURN nSalary;
  END;

  PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2)) AS
  BEGIN
    UPDATE employee SET salary=salary+amount WHERE id=eid;
    log(eid, 'raiseSalary id=' || eid || ' amount=' || amount);
  END;

  PROCEDURE raiseSalaryStd(eid INT) AS
  BEGIN
    raiseSalary(eid, stdRaiseAmount);
    log(eid, 'raiseSalaryStd id=' || eid);
  END;

BEGIN  
  log(0, 'Session ' || connection_id() || ' ' || current_user || ' started');
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci

相关问题