ora-06553 pls-306 调用“ogc_x”时参数的数量或类型错误

Posted

技术标签:

【中文标题】ora-06553 pls-306 调用“ogc_x”时参数的数量或类型错误【英文标题】:ora-06553 pls-306 wrong number or types of arguments in call to 'ogc_x' 【发布时间】:2012-12-03 16:41:58 【问题描述】:

我正在尝试在 oracle 10g 中进行查询。它是这样的:

SELECT
  *
FROM
  h2h_reg reg,
  h2h_cat_estatus est
WHERE
  reg.FECH_APLICACION = SYSDATE
AND REG.ID_EST        = EST.ID_ESTATUS
AND est.tipo_estatus  = "X";

所以它运行得很顺利,但是当我尝试添加一个组时:

SELECT
  reg.id_arch,
  reg.id_prod
FROM
  h2h_reg reg,
  h2h_cat_estatus est
WHERE
  reg.FECH_APLICACION = SYSDATE
AND reg.id_est        = est.id_estatus
AND EST.TIPO_ESTATUS  = "X"
GROUP BY
  reg.id_arch,
  reg.id_prod;

我收到下一条消息:

有人知道我的查询出了什么问题吗?

【问题讨论】:

你需要DISTINCT,因为你没有使用任何聚合。 您发布的错误引用了一个未出现在查询中的任何地方的函数 (ogc_x) 是怎么回事?您确定您发布的查询和您发布的错误一起出现吗? FROM 子句中的对象之一是引用ogc_x 函数的视图吗?此外,Oracle 中的字符串用单引号而不是双引号括起来。如果您在 Oracle 中使用 = "X",则会产生语法错误。不过,这将是与您发布的不同的语法错误。 【参考方案1】:

您在 "X" 上使用了双引号。

这应该是'X'

X 对象是 MDSYS 模式中的一个函数,“ogc_x”,所以当你说 est.tipo_estatus = "X" 而不是正确的 est.tipo_estatus = 'X' 时,它会被翻译(因为“”是一个标识符,所以“X”是相同的就像只是在est.tipo_estatus = mdsys.ogc_x 中输入 X) 一样,当然会失败。

【讨论】:

【参考方案2】:

试试DISTINCT

SELECT DISTINCT reg.id_arch, reg.id_prod
  FROM h2h_reg reg, h2h_cat_estatus est
 WHERE reg.FECH_APLICACION = SYSDATE
   AND reg.id_est = est.id_estatus
   AND est.tipo_estatus = 'X'

【讨论】:

【参考方案3】:

我发现这个错误是因为我使用了 Oracle 保留字来命名我的一些列,例如日期、时间、评论等。一旦我重命名列,问题就消失了。

【讨论】:

以上是关于ora-06553 pls-306 调用“ogc_x”时参数的数量或类型错误的主要内容,如果未能解决你的问题,请参考以下文章

动态执行立即查询的问题

使用 Mybatis 将布尔参数传递给存储过程

神秘的 ORA-06553:PLS-103

Oracle:如何调用重载过程?

在 Oracle 12c 中插入对象数据

PL/SQL 异常翻译