使用多态性是可能的吗?在MariaDB的CREATE PACKAGE
和CREATE 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
SHOW CREATE PACKAGE BODY employee_toolsG
*************************** 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