Oracle(存储过程,触发器等中) if语句中不能有子查询的原因和解决方案

Oracle数据库知识 day02 索引&pl/sql语法&存储过程&触发器 一、视图 1.1概念: 视图就是封装了一条复杂查询的语句。 1.2 语法: CREATE VIEW 视图名称 AS 子查询 CREATE OR REPLACE VIEW 视图名称 AS 子查询:如果视图已经存在我们可以使用语法 2 来创建视图,这样已有的视图会被覆盖。 CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY:设置视图为只读 1.3范例:建立一个视图,此视图包括了 20 部门的... 阅读详情

如果我们输入并运行以下代码:

 

begin
  if 'U001' in (select userId from userInfo)
    then dbms_output.put_line('用户编号重复');
  end if;
end;

 

会得到以下的错误信息:

可以知道,PL/SQL中,if语句是不能有子查询的,PL/SQL的语法有限制。IF 后面只能是逻辑表达式

 

 

实际应用中

如创建以下存储过程

create or replace procedure proc_user_reg(Param_userId varchar2,Param_realName varchar2,Param_password varchar2)
is
begin
  if Param_userId in (select userId from userInfo)
   then dbms_output.put_line('用户编号重复');
    else
      insert into userInfo values(Param_userId,Param_realName,Param_password,default); 
  end if;
end;
在调用此存储过程中也会出现上面的问题

 

 


解决方法:
定义一个变量,通过count(*)来统计原表中重复数据的个数。相当于用另一种方法实现了IN语句的判断

--变量的定义声明在is或as后

create or replace procedure proc_user_reg(Param_userId varchar2,Param_realName varchar2,Param_password varchar2)
is countResult number;
begin
  select count(*) into countResult from userInfo where userId=Param_userId;
  if countResult=0
   then insert into userInfo values(Param_userId,Param_realName,Param_password,default);
    else
       dbms_output.put_line('用户编号重复');
  end if;
end;


 

CMake接口库实战:如何用add_library的INTERFACE选项管理跨项目依赖 本文深入探讨了CMake中add_library的INTERFACE选项在管理跨项目依赖时的实战应用。通过创建不包含源代码的接口库,开发者可以集中管理头文件路径、编译定义、链接库等公共配置,并将其声明式地传递给依赖目标。文章以构建模块化跨平台网络应用为例,详细展示了如何利用接口库实现配置的集中化、依赖关系的显式化,从而提升大型项目的可维护性和可移植性。 阅读详情

相关推荐

Xilinx System Generator多速率系统(Multi-Rate Systems)的使用

在本实验练习中,您将学习在System Generator中如何使用多个时钟域有效地实现具有多个数据速率的设计。

白码王子小张的博客 1093

oracle if查询,Oracle条件查询

Oracle条件查询条件查询需要用到where语句,where必须放到from语句表的后面。支持如下运算符运算法说明=等于<>或!=不等于<小于<=小于等于>大于>=大于等于between … and ….两个值之间is null为null等号操作符● 查询薪水为5000的员工select empno, ename, sal from emp where sal...

weixin_30705125的博客 2438

jQuery 版本怎么选?别一上来就用最新版,老项目里这个坑很常见

jQuery 是一个封装好的 JavaScript 函数库,简称 JQ它的核心理念是jQuery 有 1.x、2.x、3.x 三个主要版本系列2.0 以上版本不再支持 IE6、IE7、IE8版本选择不能只看“新不新”,而要看项目兼容性和实际需求.min.js是压缩版文件,生产环境常用使用 jQuery 前必须先通过<script>正确引入基本就是没引入或引入失败可以快速绑定点击事件.animate()可以快速实现动画效果,但定位属性要设置好。

Web安全工具库 397

Oracle PLS-00405 在此上下文中不允许使用子查询

开发中在Oracle中写了一个函数,后来用户有要求,一部分特定的客户走特定的逻辑,除去这些特定客户,其他的还是走旧的逻辑,于是在函数内加了如下的判断 if customerno in (select customerno from tablename where ...) then ...; end if; 接下来提交就一直报错:PLS-00405,在此上下文中不允许使用子查询 查了一下资料,Oracle不允许在if逻辑判断内使用子查询 in (select …from …) 于是直接在

imwier的博客 1386

参考线平滑-FemPosDeviation-SQP

使用SQP(顺序二次规划)对离散点进行平滑

mpt0816的博客 2439

Synares病毒实战:如何手动清除C盘隐藏的Synaptics.exe(附资源修复脚本)

本文详细介绍了Synares感染型病毒的手动清除方法,该病毒伪装成Synaptics触摸板驱动,感染EXE和XLSX文件。文章提供了从病毒行为分析、母体清除到被感染文件修复的全流程指南,并附有实用的资源修复脚本和防御加固方案,帮助用户彻底清除这一顽固病毒。

lg888的博客 2355

oracle初学者笔记

oracle初学者笔记

weixin_44159612的博客 1092

ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案

本文主要介绍了ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 19万+

oracle中的循环和判断,oracle判断和循环语句语法

--条件判断语句--if 逻辑表达式 then代码1;end if;--条件判断语句--if 逻辑表达式 then代码1;else代码2;end if;--条件判断语句--if 逻辑表达式 then代码1;elsif 逻辑表达式 then代码2;else代码3;end if;--多分枝判断语句--case 变量when 值1 then代码1;when 值2 then代码2;else代码3;end ...

weixin_29962351的博客 1089

车载软件刷写工具vFlash --- 自动化接口(Automation API)应用简介

车载软件刷写工具vFlash --- 自动化接口(Automation API)应用简介

Soly_kun的博客 361

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。

weixin_54787054的博客 1261

ORACLE 子查询的写法

概述 在项目中,一些复杂的查询都会用到子查询来查数据,对于刚开始起步写复杂SQL的话,可能会有点力不从心,如果子查询在嵌套NOT EXISTS的话,可能会觉得有点力不从心,那么根据一个案例来了解一下子查询的大体写法把 demo 表中数据 创建视图 create view V as select * from emp where deptno != 3 union all select * from emp where ename = 'WARD' select * from V 视图中数据 我们可

weixin_40598838的博客 1188

1、掌握 Microsoft Dynamics 365 Business Central 开发全解析

本文全面解析了Microsoft Dynamics 365 Business Central的开发全流程,涵盖开发环境搭建、AL语言扩展开发、定制解决方案实现、高级开发技术、文件与报表处理、打印功能、调试与性能优化、API使用、Azure和Power Platform集成、DevOps实践以及生成式AI应用。同时探讨了开发工具技巧、常见问题解决、开发流程优化、团队协作要点及未来技术趋势,帮助开发者系统掌握Business Central开发核心技能,提升企业级应用开发效率与质量。

food6的博客 111

oracle 触发器中if,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_42485957的博客 299

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

oracle 索引,视图,存储过程,触发器 函数

Oracle索引?   目地:更快地检索数据。   特点:读取数据速度快,但添加数据速度慢.。   语法:   create index idx_stu_email on stu (email) ;   drop index idx_stu_email ;   sel

xiashan17的专栏 932

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

oracle 触发器子查询,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_32803963的博客 421

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

如何在Oracle触发器中使用查询语句

通常情况下,Oracle数据库禁止在行级触发器或行级触发器所调用的子程序中使用查询语句。但是,面对复杂的业务逻辑,不可避免的要使用查询语句。 当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常。 Oracle官方文档中对ORA-04091异常的说明如下: ORA-04091: table string.string is mutating, trigge...

weixin_38169562的博客 1206

oracle 视图 存储过程 触发器详解

Oracle索引?   目地:更快地检索数据。   特点:读取数据速度快,但添加数据速度慢.。   语法:   create index idx_stu_email on stu (email) ;   drop index idx_stu_email ;   select index_name from user_indexs ; Oracle视图?        C

Aring专注网络安全 994

oracle 判断子查询,ORACLE中的子查询

ORACLE中的子查询“子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询。当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果。ORACLE中常见的子查询有下面几类:A、单行子查询(Single-row subqueries)。B、多行子查询(Multirow subqueries)。C、内部视图型子查询(Inline views)。D、多...

weixin_42721619的博客 673

oracle 报错pls 00405,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_39879674的博客 234

郑大工学院oracle,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_35078004的博客 159

Oracle里面if怎么过滤异常,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_39553776的博客 173

oracle 创建触发器

一.什么是触发器 触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。   1.触发器的功能: 允许/限制对表的修改 强制数据一致性 自动生成派生列,比如自增字段 提供审计和日志记录 防止无效的事务处理 启用复杂的业务逻辑 二.创建触发器 1.基本语法结构 Create [or replace] trigger [模式.]触发器名 ...

tanyunfei的博客 607

快速入门到精通:一篇学会Oracle

Oracle全面的基础知识和知识点的举例,帮助初学者快速入门。 SQL语句,SQL查询,Oracle函数,代码块知识,条件判断/循环语句,索引、游标,锁,视图,存储过程,触发器,分区表,Oracle优化,建模

weixin_63021300的博客 4万+

oracle--ORA:04091:触发器/函数不能读它

   第一次写触发器,就有bug了    前台用ajax保存用户的修改和删除,这时需求要加个触发器,在修改和删除时修改其他表的字段,加完触发器,点保存,前台弹出js错误,以为是js写的有误,结果查了半天js发现是ajax返回是出错。    后台则为:2012-02-28 13:05:11,960 WARN [http-8080-Processor23] [RequestProcessor] U...

BigDragon 1462

oracle中if是不可用的吗,求助帖!oracle触发器if中不支持子查询怎么处理

该楼层疑似违规已被系统折叠隐藏此楼查看此楼create or replace trigger "DEPART_ADD_TRIGGER"after insert on bd_deptdoc for each rowbeginif :new.def15=*Y* and :new.pk_corp in (select pk_corp from bd_corp where pk_corp=*1553* ...

weixin_29340419的博客 290
上一篇: JAVA JTable的实用使用方法
下一篇: 【Android学习笔记】Android播放音乐示例代码
wangxiaojingo
博客等级 码龄15年 31粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值