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_FOUND
或TOO_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:第 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