存储过程,传入值为sql语句的笔记。

一般的存储过程的传入参数是 具体的值,过程中利用传入的值去计算或是操作。

工作中往往会碰到一些偏向动态的过程操作,例如根据传来的sql语句改变游标。

 

 首先游标中的字段是要确定的,无论传递什么样的sql进来,所查询出来的游标内容是一定的。

如果有了上述的保障,就可以行动了。

首先是创建一个package,这个package种 需要声明 一个cursor Type,用作动态游标。

具体命令如下

 

create or replace package pkg_systeminfo
as
type systeminfo is ref cursor;  --定义一个新的 游标类型
type record_type is record(     -- 定义新游标里的内容
    tid   varchar2(200),
    tname varchar2(200),
    rtime date,
    rid  varchar2(200));
end;

 

 

接着去写我们的procedure

 

create or replace procedure prc_systeminfo(sqlstr in varchar2  )

is

  --define
  sysid varchar2(200);
  sysname varchar2(200);
  reg_time date;
  reg_id varchar2(200);
  reg_name varchar2(200);
  usercount number(20);
  answercount number(20);
  v_time varchar2(200);
  v_usercount varchar2(200);
  v_answercount varchar2(200);
  n_flag number(4);
  cur pkg_systeminfo.systeminfo;  --定义游标
  systype pkg_systeminfo.record_type; --定义游标容器

  begin
    sysid :='';
    sysname :='';
    reg_id:='';
    reg_name:='';
    usercount:=0;
    answercount:=0;
    v_time:='';
    v_usercount:='';
    v_answercount:='';
    n_flag:=0;
    open cur for sqlstr; --打开游标并加入传进的sql
       loop
         <<flag>>    --返回点
         fetch cur into systype; --压入数据
         IF cur%NOTFOUND THEN
            EXIT;
            ELSE
                sysid:=systype.tid;
                sysname:=systype.tname;
                reg_id:=systype.rid;
                select NVL(count(1),0) into n_flag from pt_user_detail t where t.id = reg_id;
                if n_flag>0 then
                select NVL(t.name,'') into reg_name from pt_user_detail t where t.id = reg_id;
                reg_time:=systype.rtime;
                select to_char(reg_time ,'yyyy-MM-dd HH:mi:ss') into v_time from dual;
                select NVL(count(1),0) into usercount from kasai_objects_users_roles t where t.id_object = sysid;
                select to_char(usercount) into v_usercount from dual;
                select NVL(count(1),0) into answercount from common_surveyuser x,kasai_objects_users_roles y where x.buser=y.id_user and y.id_object=sysid;
                select to_char(answercount) into v_answercount from dual;
                insert into tb_test_chunf values(sysname,v_time,reg_name,v_usercount,v_answercount);
                else
                  goto flag;   --不满足条件转向下次循环,类似java的continue
                end if;
          end if;
          end loop;
          close cur;  --关闭
          commit;
  end prc_systeminfo;

 

以上标记黑色加粗字体是比较重要的。

 

LeetCode 面试经典 150 题回顾 最经典 150 题,掌握面试所有知识点 面试经典 150 题 : 题目分析、解题思路、复杂度分析、代码展示 阅读详情

相关推荐

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计

在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。

weixin_32296621的博客 366

存储过程中传参执行sql语句

CREATE OR REPLACE PROCEDURE XXX.xXX( //传进来的参数值,使用逗号隔开 workProSchname in varchar2(200), xuenian in varchar2(200), typeid in varchar2(200), code in varchar2(200), phase in varchar2(200), classname in n...

qq_38611340的博客 2693

反激开关电源变压器设计实例讲解(定明芳)

内容来自《反激变压器的设计》(定明芳主讲)。 定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。 1.确定电源规格 2.确定工作频率和最大占空比 3.计算匝比(利用伏秒平衡原则) 此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。 4.计算初级线圈峰值电流 基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip

ydgd118的博客 5万+

oracle nvl count 1 0,【mysql】返回count(*)总数为0的值

【mysql】返回count(*)总数为0的值在做mysql题的时候遇到了比较棘手的问题,花费了挺长时间才解决(本人小白),难点应该就是这个:返回count(*)是0的值(原题地址:https://leetcode-cn.com/problems/trips-and-users/submissions/)。太多知识点不会了,做的时候很掉头发!在网上查了资料,一步一步解决,最终Sql如下(用Navi...

weixin_39625872的博客 506

Dify+MCP 双剑合璧:告别知识库模糊统计,让AI精准查询数据库数据!

本文详细介绍了如何通过Dify和MCP的结合,解决知识库在数据库查询中的模糊统计问题。通过MCP中间件将自然语言实时转换为SQL语句,实现精准数据查询,并支持SSE协议持续更新数据。文章包含MySQL环境搭建、MCP服务端部署、Dify工作流配置等实战步骤,帮助用户高效构建智能数据库查询系统。

weixin_33737774的博客 370

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码)

本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。

weixin_29229055的博客 245

oracle nvl count 1 0,对Oracle中NVL函数的一点点理解

以前对nvl函数的理解很模糊,今天,终于知道了nvl函数的用法:它主要是对null的处理,因为空值是不能被索引的,所以查询时有些符合条件的数据可能查询不出来。比如下面这张表的数据,如果你要求平均月销售金额(其中第12条数据的月销售额为空),直接用avg()函数,数据是不准确的,这样求出来的平均数是11个月的,而我们要求的是12个月的平均值,所以这样做,得到的数据显然不准确。对于处理空值,我们nvl...

weixin_26891599的博客 859

手把手教学,Python 游戏编程之实现飞机大战(含源代码)

我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标被消除通过后带来的愉悦感。那么如果用Python来实现飞机大战游戏?下面就跟大家一起用Python来做一个小游戏,不仅可以从中感受到乐趣,还可以提升自己的能力。

veratata的博客 1万+

oracle nvl count 1 0,含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)...

在SQLServer数据库查询中,为了对查询成果进行对比、解析,我们经常会用到GROUPBY子句以及COUNT()函数来对查询成果进行分类、统计等。然则我们在应用的过程中往往会存在一些题目,本文我们就介绍了一个题目,并给出了它的解决规划,接下来就让我们来一路懂得一下这项目组内容吧。1.题目:如下ExampleTable表,求各类类(CategoryID)满足Flag便是1的记录数。IDFlagCa...

weixin_42242323的博客 1329

目标检测YOLO实战应用案例100讲-【目标检测】缺陷检测(二)

在工业生产中总是经常遇到裂痕、划痕等产品的表面缺陷问题,机器视觉行业对于表面检测相比前几年已经有很大的突破,对于产品表面的划伤、污迹等检测已经不再是难点。在金属、玻璃、手机屏幕、液晶板等行业表面检测上应用广泛。但由于该类缺陷形状不规则、深浅对比度低,而且往往会被产品表面的自然纹理或图案所干扰。因此,表面划痕缺陷检测对于正确打光、相机分辨率、被检测部件与工业相机的相对位置、复杂的机器视觉算法等要求非常高。

qq_36130719的博客 729

阅文集团大数据面试题及参考答案

在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark;

大模型大数据攻城狮的专栏 1090

Mysql_sql存储过程

#存储过程     存储过程和函数:类似于java中的方法     好处:         1.提高代码的重用性         2.简化操作         #存储过程  procedure             含义:一组预先编译好的SQL语句的集合,理解成批处理语句             1.提高代码的重用性             2.简化操作            ...

YanQiu_Only 4186

2025年06月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析

2025年06月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析

伶俐角少儿编程 460

MySQL高级SQL语句(存储过程)

存储过程是一组为了完成特定功能的SQL语句集合。存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

Y_S_J_112的博客 7588

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

存储过程(SQL)

所以要事先用 "DELIMITER //" 声明当前段分隔符,让编译器把两个 "//" 之间的内容当做存储过程的代码,不会执行这些代码。内部变量在其作用域范围内享有更高的优先权,当执行到end时,内部变量消失,不再可见了,在存储过程外再也找不到这个内部变量,但是可以通过out参数或者将其值指派给会话变量来保存其值。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

m0_71192988的博客 8621

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

sql server学习笔记——批处理语句、存储过程

目录 批处理语句 1、批处理语句简介 示例一: 示例二: 存储过程 一、什么是存储过程 1、存储过程的简介 2、存储过程包含的内容 3、存储过程的优点 4、存储过程的分类 系统存储过程: 用户定义存储过程 5、常用的系统储存过程 (1)一般常用的存储过程 (2)xp_cmdshell 二、创建存储过程 1、定义存储过程的语法 2、不带参数的存储过程 3、带参数...

weixin_45116657的博客 2552

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

存储过程中拼接SQL语句

很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了。具体看如下演示代码:   代码: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Au

杨元的博客 1万+

mysql 存储过程中使用动态sql语句

Mysql 5.0 以后,支持了动态sql语句,我们可以通过传递不同的参数得到我们想要的值   这里介绍两种在存储过程中的动态sql:   set sql = (预处理的sql语句,可以是用concat拼接的语句)   set @sql = sql   PREPAREstmt_nameFROM @sql;   EXECUTEstmt_name;   {DEALLOC...

weixin_30572613的博客 1860

MySQL高级SQL语句操作之存储过程

存储过程是一组为了完成特殊功能的SQL语句集合存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率SQL语句加上控制语句的集合,灵活性高在服务器端存储,客户端调用时,降低网络负载可多次重复被调用,可随时修改,不影响客户端调用。

m0_74412260的博客 3238

SQL数据库语句创建及管理存储过程

掌握存储过程的概念、功能及使用方法; 掌握执行存储过程的方法; 创建及管理存储过程 以实验数据库为基础数据,编写并执行以下存储过程 1.创建一个无参存储过程pr_stuscore,查询以下信息:学号、姓名、性别、课程名称、考试成绩。 CREATE PROC pr_stuscore AS SELECT student.s_id,sname,ssex,cname,grade from student,course,grade WHERE student .s_id=grade.s_id ..

LZH-z 5790

SQL教程——存储过程

本教程中所使用的数据库的建表语句都在“SQL教程——索引”这篇文章中,点击链接直达:索引&建表语句 摘要:本文主要介绍SQL语法的存储过程 目录 存储过程和函数 存储过程 一、创建语法 二、调用语法 三、删除语法 四、查看存储过程信息 存储过程和函数 存储过程和函数:类似java中的方法 好处: 提高代码的重用性 简化操作 存储过程 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 一、创建语法 createp...

待到春花烂漫时 1万+

MySQL高级SQL语句(三)存储过程

高阶语句三存储过程

在熙丶的博客 3248

sql server将表作为一个参数传入存储过程

由于需要,我在c#中序列化了一个list实体为DATATable传入存储过程作为临时表查询,记录一下 序列化datatable var data = eccPreSellsService.GetPreSells(deliverSiteId, shopCateId, keyword).Select(x => new pretable { ID = x.id, starttime = x.Get...

v18770350613的博客 3368

【SQL】存储过程(Stored Procedure)

什么是存储过程?如何创建和使用存储过程?MySQL和SQL SERVER中的存储过程有什么区别?

m0_69371690的博客 2626

SQL使用存储过程

本文介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。

欢迎来到我的博客。 1711

mysql(十)条件语句、循环语句、动态执行SQL语句

MySQL数据库-条件语句、循环语句、动态执行SQL语句   1、if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSEIF i = 2 THEN SE

changhenshui1990的博客 4万+
上一篇: oracle定时任务基础
下一篇: 解决IE 浏览器(微软BUG)select标签无值问题
vortex331
博客等级 码龄16年 0粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值