这个问题要分具体数据库系统来看,不能一概而论。
在同一个 package 或 schema 中,可以定义:
CREATE PROCEDURE p_test(p_id NUMBER) IS
BEGIN NULL; END;
CREATE PROCEDURE p_test(p_name VARCHAR2) IS
BEGIN NULL; END;
✅ 合法,Oracle 根据调用参数自动选择
CREATE PROCEDURE p_test(IN a INT) ...
CREATE PROCEDURE p_test(IN a VARCHAR(10)) ... -- ❌ 报错
❌ 同名即冲突
替代方案:
CREATE PROCEDURE p_test @a INT ...
CREATE PROCEDURE p_test @a VARCHAR ... -- ❌ 报错
✅ 替代方案:
CREATE PROCEDURE p_test
@a INT = NULL,
@b VARCHAR(50) = NULL
通过参数可选来“模拟重载”
CREATE FUNCTION f_test(a INT) ...
CREATE FUNCTION f_test(a TEXT) ...
✅ 合法(FUNCTION)
⚠️ 存储过程(PROCEDURE)一般不推荐用于重载场景
| 数据库 | 存储过程重载 |
|---|---|
| Oracle | ✅ 支持 |
| MySQL | ❌ 不支持 |
| SQL Server | ❌ 不支持 |
| PostgreSQL | ⚠️ 函数支持,过程不典型 |
如果你愿意,可以告诉我:
我可以给你最合适的替代设计方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。