ORA-06550: 错误的参数数量或类型

Posted

技术标签:

【中文标题】ORA-06550: 错误的参数数量或类型【英文标题】:ORA-06550: wrong number or types of arguments 【发布时间】:2018-03-31 10:36:02 【问题描述】:

为什么预言机回来了..

ORA-06550:第 9 行,第 3 列:PLS-00306:调用“ADD_RULE_RANGE_ATTR”时参数的数量或类型错误 ORA-06550:第 9 行,第 3 列:PL/SQL:语句被忽略

当我按照程序规范设置了所有类型和参数时。

程序规范

PROCEDURE add_rule_range_attr(
    "p_name" IN VARCHAR2,
    "p_entity" IN VARCHAR2,
    "p_attribute" IN VARCHAR2,
    "p_r_negate" IN NUMBER,
    "p_ra_comparer1" IN VARCHAR2,
    "p_ra_comparer2" IN VARCHAR2
);

最初我的代码在 Oracle APEX 环境中运行,其中过程的参数由输入变量填充(例如:PX_INPUT_NAME),所以我必须确保我放入参数中的所有变量都是正确的数据类型。但是,在调用过程时,我使用具有与过程参数请求的数据类型相对应的默认值的变量。

调用过程

brg_manager.add_rule_range_attr(
    p_name => v_name,
    p_entity => v_entity,
    p_attribute => v_attribute,
    p_r_negate => v_negate,
    p_ra_comparer1 => v_comparer1,
    p_ra_comparer2 => v_comparer2
);

查看this sqlfiddle 的工作示例。

【问题讨论】:

p_name"p_name" 不是一回事。 声明对象时不要使用"。你只是为自己和任何其他不得不使用你的模式的可怜虫创造了一个痛苦的世界。 问题只是Oracle标识符不区分大小写......直到你在它们周围加上双引号。或者更准确地说,p_nameP_NameP_NAME 都被视为P_NAME,而"p_name" 被视为p_name(全部小写)。 【参考方案1】:

您需要省略"(过程定义)或在参数标识符周围使用" 调用它:

brg_manager.add_rule_range_attr(
    "p_name" => v_name,
    "p_entity" => v_entity,
    "p_attribute" => v_attribute,
    "p_r_negate" => v_negate,
    "p_ra_comparer1" => v_comparer1,
    "p_ra_comparer2" => v_comparer2
);

DBFiddle Demo


来自Schema Object Names and Qualifiers :

架构对象命名规则

每个数据库对象都有一个名称。在 SQL 语句中,您可以用带引号的标识符或不带引号的标识符来表示对象的名称。

带引号的标识符以双引号 (") 开头和结尾。如果使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。

【讨论】:

以上是关于ORA-06550: 错误的参数数量或类型的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06550: 调用 'CHECK_INFO_INS' 的参数数量或类型错误

调用中的参数数量或类型错误

调用我的程序时参数的数量或类型错误

ORA-06550,PLS-00306;向 Oracle 过程插入数据时出错

ORA-06550 第 11 行第 3 列在下面的 PL/SQL 存储过程中调用的参数数量错误

ORA-06550:第 1 行,第 13 列:PLS-00382:表达式类型错误 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略