gpt4 book ai didi

oracle - 使用 DATE 和 VARCHAR2 重载 oracle 过程

转载 作者:行者123 更新时间:2023-12-03 21:25:14 24 4
gpt4 key购买 nike

我有以下不起作用的代码。它可以编译,但是当使用 sysdate 作为 parm_value 参数调用时,它会抛出 PLS-00307: too many declarations of 'P_UPSERT_SDE_DATA' match this call 如果我注释掉 varchar2 条目,重载仅对日期和数字数据类型按预期工作。

完成我正在尝试做的事情的最佳方法是什么,即接受仅在 parm_values 数据类型(特别是日期和 varchar2)上不同的参数?

  PROCEDURE P_Upsert_SDE_Data(parm_table_name   GORSDAV.GORSDAV_TABLE_NAME%TYPE,
parm_attr_name GORSDAV.GORSDAV_ATTR_NAME%TYPE,
parm_key GORSDAV.GORSDAV_PK_PARENTTAB%TYPE,
parm_user_id GORSDAV.GORSDAV_USER_ID%TYPE,
parm_value VARCHAR2);
--
PROCEDURE P_Upsert_SDE_Data(parm_table_name GORSDAV.GORSDAV_TABLE_NAME%TYPE,
parm_attr_name GORSDAV.GORSDAV_ATTR_NAME%TYPE,
parm_key GORSDAV.GORSDAV_PK_PARENTTAB%TYPE,
parm_user_id GORSDAV.GORSDAV_USER_ID%TYPE,
parm_value NUMBER);

PROCEDURE P_Upsert_SDE_Data(parm_table_name GORSDAV.GORSDAV_TABLE_NAME%TYPE,
parm_attr_name GORSDAV.GORSDAV_ATTR_NAME%TYPE,
parm_key GORSDAV.GORSDAV_PK_PARENTTAB%TYPE,
parm_user_id GORSDAV.GORSDAV_USER_ID%TYPE,
parm_value DATE);

最佳答案

如果您传递的其他参数之一正在被隐式转换,您可以看到这一点;从您发布的电话中我怀疑 var_FRB‌ GRNT_CODE 是不同的类型并且正在转换;例如该变量是一个数字,GORSDAV.GORSDAV_PK_PARENTTAB 是一个字符串。

From the documentation :

When trying to determine which subprogram was invoked, if the PL/SQL compiler implicitly converts one parameter to a matching type, then the compiler looks for other parameters that it can implicitly convert to matching types. If there is more than one match, then compile-time error PLS-00307 occurs, as in Example 8-34.

其他参数之一的隐式转换使其寻找其他参数的潜在转换;只有这样它才能看到日期和 varchar2 版本,它们可以隐式地相互转换。如果所有参数的类型都与用于形式参数声明的表列的类型相同,那么它不会寻找隐式转换,也不会被 date/varchar2 版本混淆。

关于oracle - 使用 DATE 和 VARCHAR2 重载 oracle 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com