Oracle 函数 “判断数据表中不存在的数据,才允许通过”

 1 create or replace function mca_detail_material_val(p_material_code VARCHAR2,  --实参
 2                                                    p_material_name VARCHAR2,
 3                                                    p_mca_no VARCHAR2
 4                                                   )
 5        RETURN varchar2 AS
 6
 7  --物料编码/名称的验证,数据表(MATERIAL)中 不存在 该物料编码/名称,允许通过,填其他值都不允许通过
 8
 9        v_count1   NUMBER; -- 形参
10        v_count2   NUMBER;
11        v_count3   NUMBER;
12        v_count4   NUMBER;
13
14        CURSOR get_wl_material_code1 IS
15               SELECT count(m.material_code)  -- count()函数:查询出来的记录条数(记录数)
16               FROM   MATERIAL m
17               WHERE  m.material_code = p_material_code;
18
19        CURSOR get_wl_material_code2 IS
20               SELECT count(material_code)
21               FROM   mca_detail m
22               WHERE  m.material_code = p_material_code AND m.mca_no <> p_mca_no;
23                                                      -- m.mca_no <> p_mca_no:在编辑时,排除此单号(不做比较)---物料编码
24        CURSOR get_wl_material_name1 IS
25               SELECT count(m.material_name)
26               FROM   MATERIAL m
27               WHERE  m.material_name = p_material_name;
28
29        CURSOR get_wl_material_name2 IS
30               SELECT count(m.material_name)
31               FROM   mca_detail m
32               WHERE  m.material_name = p_material_name AND m.mca_no <> p_mca_no;
33 BEGIN                                                -- m.mca_no <> p_mca_no:在编辑时,排除此单号(不做比较)---物料名称
34       OPEN get_wl_material_code1;
35       FETCH get_wl_material_code1 INTO v_count1;
36       CLOSE get_wl_material_code1;
37
38       OPEN get_wl_material_code2;
39       FETCH get_wl_material_code2 INTO v_count3;
40       CLOSE get_wl_material_code2;
41
42       OPEN get_wl_material_name1;
43       FETCH get_wl_material_name1 INTO v_count2;
44       CLOSE get_wl_material_name1;
45
46       OPEN get_wl_material_name2;
47       FETCH get_wl_material_name2 INTO v_count4;
48       CLOSE get_wl_material_name2;
49
50       IF v_count1+v_count3 <> 0 THEN
51          RETURN ‘4823272‘; -- 错误信息码(信息码表),物料编码已存在,不允许出现相同值!
52       ELSIF v_count2+v_count4 <> 0 THEN
53          RETURN ‘4823273‘; -- 错误信息码(信息码表),物料名称已存在,不允许出现相同值!
54       END IF;
55
56       RETURN ‘0‘;
57
58 end mca_detail_material_val;
时间: 2024-11-06 20:50:09

Oracle 函数 “判断数据表中不存在的数据,才允许通过”的相关文章

MySql 获取数据表中随机一条数据

通过sql语句获取数据表中的随意一条数据 -- rand() 获取0到1之间的随机浮点数 -- ((select max(id) from test) - (select min(id) from test)) * rand() 获取到随机数 -- + (select min(id) from test) 保证id为 最小ID与最大ID之间的数 select * from test where id >= ((select max(id) from test) - (select min(id)

SqlServer执行Insert命令同时判断目标表中是否存在目标数据

针对于已查询出数据结果, 且在程序中执行Sql命令, 而非数据库中的存储过程 INSERT INTO TableName (Column1, Column2, Column3, Column4, Column5)SELECT Value1, Value2, Value3, Value4, Value5WHERE NOT EXISTS (SELECT PrimaryName FROM TableName WHERE PrimaryName = PrimaryValue) 原文地址:https://

从数据表中筛选重复的数据

If you want to find duplicate data (by one or several criterias) and select the actualrows. This should also work, maybe give it try. SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1; I think this will work properly to search repeated

总结sqlserver2012删除语法:delete数据表中的某一项内容

今天我们来总结关于sql server2012这个版本的数据库的删除语法,也就是delete的用法,我们来删除数据表中的一项数据,用于测试,这也是我学习数据库的第五堂课,知识就是力量嘛!好了,来看看语法是怎么说的吧!数据库删除语法:delete from 某个表 where 指定的条件.以上就是相关的语法了,只要对应的把相关的参数一个个填写进去即可,但是涉及到条件查询的时候,往往还是有很多复杂的情况出现,这里要注意!例如,我们要删除这条数据:(傅雷家书http://www.simayi.net/

Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create or replace type splitTable is table of varchar2(100); 2.创建函数fn_splitString(功能是将字符串分割成多条记录)--测试语句select * from table(fn_splitString('ernanyinv','nan'))

Oracle使用游标删除所有用户数据表中的所有记录脚本

应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自行删除或者过滤掉该表,见下图 操作办法:直接将下面的脚本内容复制到PQSQL中执行即可 --Oracle使用游标删除所有用户数据表中的所有记录脚本 declare mystring NVARCHAR2(1000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游

Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID CODE 1 code1 2 code2 3 code2 4 code2 5 code3 通过以上表中数据可以看出 code 是有重复数据的,此时如果我们直接添加唯一键,会报错. 通过 PL/SQL 可视化操作,或者通过 SQL 语句添加(ENABLE NOVALIDATE 的作用是约束新增数据但不会

oracle 数据表中实现字段的自动增长

由于一直用的是Mysql数据库,今天刚好心血来潮,想着和Java都是同一个老板出来的oracle自己却不会,说出去会不会有点丢人,故就开始翻资料,看视频搞起来,一步一个脚 印,想着写点什么,就开始从创建表开始吧,好了,废话不多说了,开始上正题创建一个表: User表: create table user(    id number(5,0) not null primary key auto_increment,    deptid number(5,0) not null,    userna

Oracle 取两个表中数据的交集并集差异集合

Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要求找出工资2500(不含2500)以上并且是男性(M)的员工编号,那么就要利用这两个表的关系做一个交集了 employee CODE NAME GENDER 001 Tom M 002 Jerry M 003 Ana F salary CODE SALARY 001 2800 002 2500 00