当前位置: 首页 > 知识库问答 >
问题:

如何修复存储过程Oracle PL/SQL的错误?

臧威
2023-03-14
    null
CREATE OR REPLACE PROCEDURE insert_num_proc
(
float_id_param      float_sample.float_id%TYPE,
float_value_param   float_sample.float_value%TYPE)
AS
float_checker   float_sample.float_id%TYPE;
 BEGIN

SELECT float_id INTO float_checker FROM float_sample;

INSERT INTO float_sample (float_id, float_value) 
VALUES
(float_id_param, float_value_param);

 IF float_checker = float_id_param THEN
 RAISE_APPLICATION_ERROR(-20001, 'Duplicate value is inserted.'); 
 END IF;

 END;
 /

  EXECUTE insert_num_proc(3,2);

共有1个答案

慕鹏
2023-03-14

缺少一个WHERE子句来检查该id是否存在,因此它返回多行,而单个静态变量float_checker无法保存这些行。

另一个问题是,如果表中没有项,则select语句将以no_data_found异常失败。

因此,以不同的方式定义float_checker,以便保存计数。

CREATE OR REPLACE PROCEDURE insert_num_proc (
     float_id_param      float_sample.float_id%TYPE,
     float_value_param   float_sample.float_value%TYPE
) AS
     float_checker   INTEGER := 0;
BEGIN
     SELECT COUNT(*)
       INTO float_checker
     FROM float_sample  WHERE 
     float_id = float_id_param;  --where clause for the passed id.


     IF float_checker > 0
       THEN
          raise_application_error(-20001,'Duplicate value is inserted.');
     END IF;

     INSERT INTO float_sample (
          float_id,
          float_value
     ) VALUES (
          float_id_param,
          float_value_param
     );

END;
/
 类似资料:
  • 而且 而且 错误:(34,13)无法解决:com.google.firebase:firebase-auth:9.2.0在文件中显示 在项目结构对话框中显示

  • 问题内容: 我使用的是SQL Server2005。我创建了一个大多数时候都可以使用的存储过程,但是我发现了一个实例,它无法满足我的要求。 目前,代码执行的操作是这样的 输出变量在哪里。 因此,我可以得到一个数字,但我真正想要的只是SQL错误。 像 Hey之类的 东西 ,我不能这样做,因为在此列上有fk约束 或其他 约束 。我在msdn http://msdn.microsoft.com/zh-

  • 主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被

  • SQL Server存储过程将一个或多个Transact-SQL语句分组到逻辑单元中,并作为对象存储在数据库服务器中。 当第一次调用存储过程时,SQL Server会创建执行计划并将其存储在计划缓存中。 在之后的存储过程执行中,SQL Server重用该程序,以便存储过程可以非常快速地执行并具有可靠的性能。 本系列教程将介绍存储过程,并演示如何开发灵活的存储过程以优化数据库访问。 第1节. SQL

  • 主要内容:PL/SQL子程序的部分,创建存储过程,执行独立程序,删除独立存储过程,PL/SQL子程序中的参数模式,传递参数的方法在本章中,我们将讨论PL/SQL中的存储过程。 子程序是执行特定任务的程序单元/模块。 这些子程序组合起来形成更大的程序。这种做法被称为“模块化设计”。 子程序可以被称为调用程序的另一个子程序或程序调用。 可以在以下几个地方中创建一个子程序 - 在模式(schema)级别中 一个程序包中 在PL/SQL块中 在模式(schema)级别中,子程序是一个独立的子程序。它是使

  • 在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。 MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。 MySQL 中修改存储过程的语法格式如下: ALTER PROCEDURE 存储过程名 [ 特征 ... ] 指定了存储过程的特性,可能的取值有: CONTAINS SQL 表示子程序包含 SQL