当前位置: 首页 > news >正文

Oracle 存储过程

Oracle存储过程

创建存储过程

CREATE OR REPLACE PROCEDURE UPDATE_EMPLOYEE_SALARY(p_employee_id IN NUMBER,p_employee_salary IN NUMBER
)AS
BEGINUPDATE employeesSET salary = p_employee_salaryWHERE employee_id = p_employee_id;COMMIT;EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('不存在当前员工'||p_employee_id);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('AN ERROR'||SQLERRM);
END;

查询存储过程方法1

SELECT * FROM DBA_SOURCE
WHERE TYPE = 'PROCEDURE'
AND NAME = 'UPDATE_EMPLOYEE_SALARY'

查询存储过程方法2

SELECT * FROM User_Objects
WHERE OBJECT_TYPE = 'PROCEDURE'
AND OBJECT_NAME = 'UPDATE_EMPLOYEE_SALARY'

删除存储过程

DROP PROCEDURE UPDATE_EMPLOYEE_SALARY

执行存储过程

BEGIN UPDATE_EMPLOYEE_SALARY(3,'7000');
END;

多条信息的存储过程

CREATE OR REPLACE PROCEDURE INCREASE_SALARY(P_PERCENTAGE IN NUMBER
)ASCURSOR EMP_CURSOR IS SELECT EMPLOYEE_ID,SALARY FROM EMPLOYEES;
BEGINFOR EMP IN EMP_CURSOR LOOPUPDATE EMPLOYEESSET SALARY = EMP.SALARY + (EMP.SALARY*P_PERCENTAGE/100)WHERE EMPLOYEE_ID = EMP.EMPLOYEE_ID;END LOOP;COMMIT;
END;

执行存储过程

BEGININCREASE_SALARY(10);
END;

用存储过程每年生成一张表

为了在 Oracle 数据库中每年生成一张表,您可以编写一个存储过程,该存储过程可以根据当前年份动态创建表。可以使用 DBMS_SCHEDULER 或 DBMS_JOB 定期调度该存储过程。

以下是如何实现这一目标的详细步骤和示例代码:

步骤 1: 创建存储过程

首先,编写一个存储过程,根据当前年份创建一张新表。假设表的命名格式为 employees_。

CREATE OR REPLACE PROCEDURE create_yearly_employee_table ISv_year VARCHAR2(4);v_sql  VARCHAR2(1000);
BEGIN-- 获取当前年份v_year := TO_CHAR(SYSDATE, 'YYYY');-- 动态生成创建表的 SQL 语句v_sql := 'CREATE TABLE employees_' || v_year || ' (employee_id NUMBER PRIMARY KEY,first_name  VARCHAR2(50),last_name   VARCHAR2(50),salary      NUMBER)';-- 执行创建表的 SQL 语句EXECUTE IMMEDIATE v_sql;DBMS_OUTPUT.PUT_LINE('Table employees_' || v_year || ' created successfully.');
EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;
/

步骤 2: 创建调度任务

使用 DBMS_SCHEDULER 包定期调度存储过程的执行。下面的示例每天执行一次存储过程,但您可以根据需要调整调度频率。

BEGINDBMS_SCHEDULER.create_job (job_name        => 'create_yearly_employee_table_job',job_type        => 'PLSQL_BLOCK',job_action      => 'BEGIN create_yearly_employee_table; END;',start_date      => TO_TIMESTAMP_TZ('2024-01-01 00:00:00 UTC', 'YYYY-MM-DD HH24:MI:SS TZR'),repeat_interval => 'FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1;BYHOUR=0;BYMINUTE=0;BYSECOND=0',enabled         => TRUE);
END;
/

解释

job_name: 调度任务的名称。
job_type: 指定任务类型为 PL/SQL 块。
job_action: 指定要执行的 PL/SQL 块。
start_date: 指定任务开始执行的日期和时间。
repeat_interval: 指定任务的重复间隔。此示例表示每年1月1日的午夜执行一次。
enabled: 启用任务。

测试存储过程

在调度任务开始运行之前,您可以手动测试存储过程以确保其正常工作。

BEGINcreate_yearly_employee_table;
END;
/

如果存储过程执行成功,您应该在数据库中看到一个新的表,例如 employees_2024。

注意事项

权限: 确保执行存储过程和调度任务的用户具有足够的权限来创建表和使用 DBMS_SCHEDULER。
错误处理: 在实际应用中,您可能需要更复杂的错误处理和日志记录机制。
表命名冲突: 如果表已经存在,存储过程会报错。可以在创建表之前检查表是否存在,并根据需要采取相应的操作。
通过上述步骤,您可以创建一个存储过程并定期调度它,以便每年自动生成一张新表。

相关文章:

Oracle 存储过程

Oracle存储过程 创建存储过程 CREATE OR REPLACE PROCEDURE UPDATE_EMPLOYEE_SALARY(p_employee_id IN NUMBER,p_employee_salary IN NUMBER )AS BEGINUPDATE employeesSET salary p_employee_salaryWHERE employee_id p_employee_id;COMMIT;EXCEPTIONWHEN NO_DATA_FOUND T…...

下载站名文件

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 得到了请求地址与请求参数后,可以发现请求参数中的出发地与目的地均为车站名的英文缩写。而这个英文缩写的字母是通过输入中文车站名转换…...

345453

38744...

Java操作redis

目录 一:Jedis 二:使用Spring Data Redis Redis 的 Java 客户端很多,官方推荐的有三种: 1.Jedis 2.Lettuce 3.Redisson 同时,Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在S…...

【数据结构(邓俊辉)学习笔记】图03——拓扑排序

文章目录 0. 概述1. 零入度算法1. 1 拓扑排序1. 2 算法 2. 零出度算法2.1 算法2.2 实现2.3. 复杂度 0. 概述 学习下拓扑排序 1. 零入度算法 1. 1 拓扑排序 首先理解下拓扑排序 其实老师经常干这事,如编讲义,将已经知道的知识点串起来变成讲课序列。那…...

C#参数使用场景简要说明

C#参数使用场景简要说明 1、传值参数 方法、类成员的初始化 2、输出参数 方法返回值不能满足,需要多个返回值时; 3、引用参数 方法需要修改变量需带回原变量时; 4、具名参数 代码可读性高,参数可交换位置 5、方法扩展&#xff08…...

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候,就会用到 最小二乘法 .根据矩阵A的情况,有如下四种方法 在r n m 时,SVD奇异…...

【Android面试八股文】你能描述一下JVM中的类加载过程吗?

文章目录 一、Java类的生命周期二、JVM类加载过程1. 加载(Loading)2. 链接(Linking)a. 验证(Verification)b. 准备(Preparation)b.1 准备阶段的初始值b.2 用户定义的初值b.3 常量的初始化c. 解析(Resolution)3. 初始化(Initialization)3.1 什么是 `<clinit>`…...

MYSQL八、MYSQL的SQL优化

一、SQL优化 sql优化是指&#xff1a;通过对sql语句和数据库结构的调整&#xff0c;来提高数据库查询、插入、更新和删除等操作的性能和效率。 1、插入数据优化 要一次性往数据库表中插入多条记录&#xff1a; insert into tb_test values(1,tom); insert into tb_tes…...

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分&#xff0c;先介绍LittleFS文件系统的结构体&#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…...

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码 SVE 软件和库支持SVE 编译参数配置-marcharmv8-alseprofilememtagsve2-aessve2-bitpermcryptosve2sve2-sha3sve2-sm4 SVE 汇编语法 在介绍 SVE 汇编指令语法之前&#xff0c;先介绍下如何判断自己所使用的芯片是否实现了SVE功…...

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…...

工业机器人远程运维,增强智慧工厂运营管理

1、需求背景 随着工业自动化技术的普及和工业机器人应用的增加&#xff0c;制造业对于生产线稳定性和效率的要求不断提高。然而&#xff0c;传统的现场监控方式存在着地理位置限制、实时监控难度大以及诊断能力有限等问题&#xff0c;迫切需要一种更具灵活性和效率的监控方式。…...

理解Python的元类

1.type()函数 type 函数是一个内置函数&#xff0c;用来获取一个对象的类型。它可以接受一个参数&#xff0c;返回这个参数的数据类型。type也可以用来创建类&#xff0c;type就是元类 x333 list["ab"] tuple (1, "a", True, 3.14) dict {name: Alice,…...

web前端黑马下载:探索学习资源的海洋

web前端黑马下载&#xff1a;探索学习资源的海洋 在数字化时代&#xff0c;Web前端技术日益成为互联网行业的核心驱动力。为了跟上这一趋势&#xff0c;众多学习者纷纷投身于Web前端的学习之中。而在这个过程中&#xff0c;“黑马”作为一个备受瞩目的品牌&#xff0c;其Web前…...

最新版jd-gui下载

对于java开发的工程师来说&#xff0c;jd-gui应该是经常会用到的工具了 官网的jd-gui目前只支持到JAVA13&#xff0c;更新版本JAVA编译出来的JAR包就反编译不出来了 此版本支持到了JAVA23 如果需要win以外的其他版本&#xff0c;可以查看我的其他上传 如果不想花积分&#…...

(051)FPGA时钟--->(001)时钟介绍

(001)时钟介绍 1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时钟介绍 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电…...

Java程序员英语单词通关:

Java程序员英语单词通关&#xff1a; abstract - 抽象的 boolean - 布尔值 break - 打断 byte - 字节 case - 情况&#xff0c;实例 catch - 捕获 char - 字符 class - 类 continue - 继续 default - 默认&#xff0c;通常 do - 做&#xff0c;运行 double - 双精度…...

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…...

0-1 背包问题(动态规划 查询背包元素)

描述 给定n种物品和一个背包&#xff0c;物品i的重量是Wi​&#xff0c;其价值为Vi​&#xff0c;问如何选择装入背包的物品&#xff0c;使得装入背包的物品的总价值最大&#xff1f; 在选择装入背包的物品时&#xff0c;对每种物品i只能有两种选择&#xff0c;装入或者不装入…...

从Word2Vec到BERT:前馈网络在NLP词嵌入进化史中扮演了什么角色?

从Word2Vec到BERT&#xff1a;前馈网络如何重塑NLP词嵌入的技术基因 在自然语言处理&#xff08;NLP&#xff09;的发展历程中&#xff0c;词嵌入技术的进化犹如一场静默的革命。当我们回溯这段历史时会发现&#xff0c;前馈神经网络&#xff08;Feedforward Neural Network&am…...

国科大研一CS选课避坑指南:从算法分析到模式识别,我的踩坑与真香体验

国科大研一CS选课避坑指南&#xff1a;从算法分析到模式识别&#xff0c;我的踩坑与真香体验 第一次踏入国科大雁栖湖校区的图书馆时&#xff0c;我被落地窗外绵延的燕山山脉震撼得说不出话——直到发现座位插座没电、WiFi信号时断时续&#xff0c;才意识到理想与现实的参差。这…...

规则直观落地操作指南(零理解成本・照做就生效・效果肉眼可见)

规则直观落地操作指南(零理解成本・照做就生效・效果肉眼可见) 核心原则:所有内容全是「动作指令」,无概念、无术语、无废话;每一步操作都有「即时可验证的落地效果」,不用等项目结束,做完立刻知道有没有用。 一、先锁死 3 条零理解成本操作铁律(必须先遵守,否则所有…...

Paste 轻量级剪贴板管理工具使用指南

Paste 轻量级剪贴板管理工具使用指南 【免费下载链接】paste A no-datastore, client-side paste service. 项目地址: https://gitcode.com/gh_mirrors/past/paste 一、场景化导入&#xff1a;当剪贴板成为你的效率瓶颈 想象一下这样的工作场景&#xff1a;你正在整理一…...

如何高效解析和生成PSD文件:Ag-PSD库完整指南

如何高效解析和生成PSD文件&#xff1a;Ag-PSD库完整指南 【免费下载链接】ag-psd Javascript library for reading and writing PSD files 项目地址: https://gitcode.com/gh_mirrors/ag/ag-psd 在当今数字设计工作流中&#xff0c;Photoshop文档&#xff08;PSD&#…...

VisionPro相机控制进阶:用C#实现拍照、实时流与图像保存的完整工作流

VisionPro相机控制进阶&#xff1a;用C#构建工业级图像采集工作流 在工业自动化领域&#xff0c;稳定可靠的图像采集系统是质量检测、尺寸测量和缺陷识别的基础。VisionPro作为工业视觉领域的标杆工具&#xff0c;配合C#强大的开发能力&#xff0c;可以构建出高性能的相机控制…...

matlab程序,傅里叶变换,频域数据,补零与不补零傅里叶变换

软件复制到浏览器下载&#xff1a;https://wwb.lanzouw.com/b02cila0j密码:cv10在导入数据前需明确是否勾选“加速度数据尾部补0,长度变为2的n次方”&#xff0c;如果输入数据点数是2 的整数倍&#xff0c;则可以直接使用 FFT 算法进行快速傅里叶变换&#xff0c;计算效率和变换…...

GoAccess源码深度解析:从main函数到核心模块调用链的完整指南

GoAccess源码深度解析&#xff1a;从main函数到核心模块调用链的完整指南 【免费下载链接】goaccess allinurl/goaccess: 是一个开源的 Web 日志分析工具&#xff0c;用于分析访问日志并生成报告。它可以帮助开发者快速了解网站流量、访问者等信息&#xff0c;优化网站性能。特…...

大模型上下文长度的优化策略与应用场景

1. 大模型上下文长度的本质与挑战 当你和ChatGPT聊天时&#xff0c;有没有遇到过它突然"失忆"的情况&#xff1f;比如聊到第20轮对话时&#xff0c;它完全忘记了开头讨论的主题。这就是上下文长度限制导致的典型问题。所谓上下文长度&#xff0c;就是大模型能够记住和…...

SKILL语言在数字IC设计中的高级应用:如何优化你的工作流程

SKILL语言在数字IC设计中的高级应用&#xff1a;如何优化你的工作流程 在数字IC设计的复杂世界里&#xff0c;效率就是竞争力。当大多数工程师还在手动点击EDA工具菜单时&#xff0c;掌握SKILL语言的高手已经用几行代码完成了批量操作。这不是魔法&#xff0c;而是SKILL语言赋…...