【问题标题】:PLS-00306: número o tipos de argumentos erróneos al llamar a 'RESTAR_SERVICIOPLS-00306:número o tipos de argumentos erróneos al llamar a 'RESTAR_SERVICIO
【发布时间】:2021-09-21 06:09:49
【问题描述】:

我正在尝试从 springboot 调用 PL/SQL 存储过程,这是我拥有的代码

CREATE OR REPLACE PROCEDURE ADMIN.RESTAR_SERVICIO(NUM_SUS IN NUMBER)
IS 
    SERVICIOS NUMBER;
    SR NUMBER;
BEGIN
    SELECT SERVICIOS_DISPONIBLES INTO SERVICIOS FROM SUSCRIPCION WHERE NUMERO_SUSCRIPCION=NUM_SUS;
    SERVICIOS := SERVICIOS-1;
    UPDATE SUSCRIPCION SET SERVICIOS_DISPONIBLES=SERVICIOS WHERE NUMERO_SUSCRIPCION=NUM_SUS;
    SELECT SERVICIOS_DISPONIBLES INTO SR FROM SUSCRIPCION WHERE NUMERO_SUSCRIPCION=NUM_SUS; 
    DBMS_OUTPUT.PUT_LINE(NUM_SUS);
END RESTAR_SERVICIO;
    @Procedure(value = "RESTAR_SERVICIO")
    public void RESTAR_SERVICIO(@Param("NUM_SUS") Number NUM_SUS);

运行时出现此错误

PLS-00306:número o tipos de argumentos erróneos al llamar a 'RESTAR_SERVICIO' ORA-06550: 线 1, 列 7: PL/SQL:语句被忽略

【问题讨论】:

  • SO 是一个英文网站。请用英文显示错误信息。谢谢。或者试试es.stackoverflow.com
  • 您对Number 有什么“导入”声明?你有import oracle.sql.Number;吗?如果不是,Number 类型指的是java.lang.Number,这是错误的类型。添加 oracle.sql.Number 的导入。

标签: java oracle spring-boot plsql


【解决方案1】:

我不会说 Java,所以我不知道你运行的代码为什么会引发错误;显然,你传递了一些东西

  • 不是数字(因为num_sus in number),或者
  • 您传递了错误数量的参数(零个/两个或两个以上)

不过,在您编写的程序中: 看起来像太多无用的代码。该过程所做的一切都可以放在一个update 语句中:

CREATE OR REPLACE PROCEDURE restar_servicio (num_sus IN NUMBER)
IS
BEGIN
   UPDATE suscripcion
      SET servicios_disponibles = servicios_disponibles - 1
    WHERE numero_suscripcion = num_sus;
END;
/

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 2021-07-17
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2014-06-25
    • 2011-08-10
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多