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

Posted

技术标签:

【中文标题】ORA-06550 第 11 行第 3 列在下面的 PL/SQL 存储过程中调用的参数数量错误【英文标题】:ORA-06550 LINE 11 COLUMN:3 WRONG NUMBER OF ARGUMENTS IN CALL TO IN BELOW PL/SQL STORED PROCEDURE 【发布时间】:2017-10-25 06:00:31 【问题描述】:
create or replace Procedure CUSTOM_SP_TYPE (parenteqName in varchar2,StartDate in DATE,EndDate in DATE,trgt_type OUT varchar2,prc out SYS_REFCURSOR)
As
Begin

  OPEN prc for SELECT DISTINCT TRGT_TYPE INTO trgt_type FROM   C_MAADEN_DAILYREPORT WHERE (HIERARCHY_TYP IN ('ASSET')) AND (PARENT_EQ_NAME IN (SELECT     EQ_NAME
  FROM IP_EQUIP_HIERARCHY WHERE (PARENT_EQ_NAME IN(SELECT EQ_NAME FROM  IP_EQUIP_HIERARCHY IP_EQUIP_HIERARCHY_1 WHERE      (PARENT_EQ_NAME IN (parenteqName)) OR
(EQ_NAME IN (parenteqName)) OR (EQ_NAME IN (parenteqName)))))) AND    
(SHFT_START_DT_TM >= StartDate)AND (SHFT_END_DT_TM <=EndDate);

 End CUSTOM_SP_TYPE;

【问题讨论】:

请在我错的地方给我正确的答案?? 如果你不显示你怎么称呼这个sp,我们怎么回答? 请修好你的键盘。你的 SHIFT 键坏了 很难阅读您的代码。请格式化。使用换行符和缩进。 您不能将打开光标OPEN prc FOR SELECT ... 和将值分配给变量SELECT ... INTO ... 结合使用。做两个不同的陈述。 【参考方案1】:

您的语法错误。工作代码是这个:

create or replace Procedure CUSTOM_SP_TYPE(
    parenteqName in varchar2,
    StartDate in DATE,
    EndDate in DATE,
    OUT_trgt_type OUT varchar2,
    prc out SYS_REFCURSOR) As
Begin

   OPEN prc for 
   SELECT DISTINCT TRGT_TYPE
   FROM C_MAADEN_DAILYREPORT 
   WHERE HIERARCHY_TYP IN ('ASSET') 
       AND PARENT_EQ_NAME IN (
          SELECT EQ_NAME
          FROM IP_EQUIP_HIERARCHY 
          WHERE PARENT_EQ_NAME IN (
              SELECT EQ_NAME 
              FROM IP_EQUIP_HIERARCHY IP_EQUIP_HIERARCHY_1 
              WHERE parenteqName IN (PARENT_EQ_NAME, EQ_NAME)
              )
          ) 
       AND SHFT_START_DT_TM >= StartDate
       AND SHFT_END_DT_TM <= EndDate;


   SELECT DISTINCT TRGT_TYPE
   INTO OUT_trgt_type
   FROM C_MAADEN_DAILYREPORT 
   WHERE HIERARCHY_TYP IN ('ASSET') 
       AND PARENT_EQ_NAME IN (
          SELECT EQ_NAME
          FROM IP_EQUIP_HIERARCHY 
          WHERE PARENT_EQ_NAME IN (
              SELECT EQ_NAME 
              FROM IP_EQUIP_HIERARCHY IP_EQUIP_HIERARCHY_1 
              WHERE parenteqName IN (PARENT_EQ_NAME, EQ_NAME)
              )
          ) 
       AND SHFT_START_DT_TM >= StartDate
       AND SHFT_END_DT_TM <= EndDate;

 End CUSTOM_SP_TYPE;

但是,打开游标prc 并将相同的值也分配给变量没有任何意义。除此之外,第二个查询可能会引发异常NO_DATA_FOUNDTOO_MANY_ROWS

那么您应该避免使用与列名称相同的变量名称。 SELECT DISTINCT TRGT_TYPE INTO trgt_type FROM ... 只是将参数 TRGT_TYPE 的现有值分配给 TRGT_TYPE,即它等同于 TRGT_TYPE := TRGT_TYPE;,这是无用的。

这个重复条件EQ_NAME IN (parenteqName) OR EQ_NAME IN (parenteqName)也没用。

【讨论】:

如何调用程序? 在 sql developer Run 中,实际上我想在 s-s-rs 报告中使用它,所以也检查了查询设计器 如果您不告诉我们您如何调用该程序,我们将无法帮助您。 除非您向我们展示您如何调用该程序,否则我将停止任何进一步的讨论。 - 很可能有错误。 什么是开始日期和结束日期的确切格式,我想采用 12 小时格式的日期和时间使用这种格式(om.shft_start_dt_tm >= to_date(:StartDate, 'mm/dd /yyyy HH12:MI:SS AM') AND om.shft_end_dt_tm

以上是关于ORA-06550 第 11 行第 3 列在下面的 PL/SQL 存储过程中调用的参数数量错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06550:第 13 行,第 4 列:PLS-00103:遇到“UPDATE” ORA-06550:第 15 行,第 3 列:PLS-00103:遇到符号“END”

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

ORA-06550:第 12 行,第 9 列:PL/SQL:ORA-00936:缺少表达式 ORA-06550:第 9 行,第 5 列:PL/SQL:忽略 SQL 语句

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

ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“PAYMENT_UPDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

ORA-06550:第 1 行,第 7 列:\nPLS-00905:对象 TEST.CMPPROJECTPROC 无效\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略&qu