存储过程案例
液氧储罐事故案例
液氧储罐事故案例近年来,液氧储罐事故频频发生,给社会带来了严重的安全隐患和巨大的财产损失。
液氧是一种高度活泼的化学物质,具有强氧化性和易燃性,因此在使用和存储过程中必须严格遵守相关的安全规范和措施。
下面将介绍一起液氧储罐事故案例。
案例概述:2024年市一家化工厂发生了一起液氧储罐事故。
液氧储罐是该工厂重要的储存设备,储存有大量的液氧用于生产和研发。
该储罐是一种密封式容器,直径为3米,高度为10米,存放液氧重量约为50吨。
事故过程:当时,该工厂正在进行一次液氧供应中断期间的检修工作。
由于液氧储罐的泄漏和减压装置出现故障,储罐内部气体压力逐渐升高。
工作人员发现储罐内的压力异常后,立即将供氧管道切断,并向周围区域疏散工作人员。
然而,由于储罐内压力快速增加,导致储罐的脱压阀无法正常工作,最终发生了气体爆炸。
爆炸产生的冲击波导致储罐的安全阀发生故障,液氧从储罐中大量泄漏。
同时,液氧的高度活泼性使得泄漏的液氧迅速蒸发并产生大量氧气。
由于周围环境中的可燃物质存在,如油漆、纸张等,加上氧气的存在,爆炸所引发的火灾迅速蔓延。
事故处理:当地消防部门和相关救援力量迅速赶到事故现场,展开灭火和救援工作。
由于事故发生在工厂内部,火势扩散迅速,给灭火工作带来了巨大的困难。
经过近10个小时的紧张扑救,终于将火势得到控制,防止了事故的进一步发展。
在事故过程中,由于火势的猛烈和浓烟的扩散,导致1名工人失踪,6名工人受伤。
事故原因分析:经初步调查,事故的主要原因是储罐内的泄漏和减压装置故障。
在检修工作期间,对液氧储罐进行了维护保养,却没有及时发现减压装置的故障。
当液氧供应中断后,储罐内部气体压力逐渐增加,超过了所能承受的极限,导致了事故的发生。
此外,事故的扑救过程中,由于对液氧的特性了解不足,防护措施不完善,也使得火势得不到有效控制,造成了不必要的伤亡和损失。
事故教训:该事故给我们敲响了警钟,液氧储罐事故的危害巨大,必须引起足够的重视。
达梦数据库存储过程 for循环实例-概述说明以及解释
达梦数据库存储过程for循环实例-概述说明以及解释1.引言1.1 概述在数据库管理系统中,存储过程是一种被预编译并存储在数据库中的一系列SQL语句集合,用于完成特定任务或操作。
达梦数据库作为一种高性能、高可靠的关系型数据库管理系统,也支持存储过程的使用。
在存储过程中,for循环是一种常见的控制结构,用于重复执行一段代码块,使得数据库操作更加灵活和高效。
本文将针对达梦数据库中的存储过程和for循环结构进行详细介绍和实例分析,帮助读者更好地了解如何在达梦数据库中应用for循环来实现复杂的数据处理操作。
同时,本文还将对for循环在数据库存储过程中的重要性和未来的展望进行总结和分析,以期为读者提供更全面、深入的了解和指导。
1.2 文章结构本文主要分为引言、正文和结论三部分。
在引言部分,首先概述了本文所讨论的主题,介绍了达梦数据库存储过程和for循环的基本概念,并说明了文章的目的。
然后对整篇文章的结构进行了概述,为读者提供了整体的框架。
在正文部分,首先对达梦数据库存储过程进行了简要介绍,让读者了解其基本特点和用途。
然后重点讨论了for循环在数据库存储过程中的应用,探讨了其在数据处理中的重要性和实际应用场景。
最后,通过具体的for循环实例分析,展示了其在实际项目中的运用和效果。
在结论部分,总结了本文对达梦数据库存储过程中for循环的重要性和应用价值,展望了将来for循环在数据库存储过程中的更广泛应用可能,最终对全文进行总结和回顾,强调了for循环在数据库存储过程中的实际意义和价值。
1.3 目的本文的主要目的是介绍在达梦数据库存储过程中使用for循环的实例。
通过具体的案例分析,读者将能够更好地理解如何在数据库存储过程中使用for循环,以及for循环在数据库操作中的重要性和实际应用。
同时,本文也旨在帮助读者更深入地了解达梦数据库存储过程的基本概念和特点,以及如何有效地利用数据库存储过程提高数据操作的效率和准确性。
SQL存储过程实例
题目11、学校图书馆借书信息管理系统建立三个表:学生信息表:student图书表:book借书信息表:borrow请编写SQL语句完成以下的功能:1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示:2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;参考查询结果如下图所示:4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所示:附加:建表语句:标准答案:题目2程序员工资表:ProWage创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:请编写T-SQL来实现如下功能:1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。
2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。
建表语句题目3:学生成绩信息三个表,结构如下:学生表:Member课程表:成绩表:Score请编写T-SQL语句来实现如下功能:1) 查询各个学生语文、数学、英语、历史课程成绩,例如下表:2)查询四门课中成绩低于70分的学生及相对应课程名和成绩。
oracle时间循环的存储过程范例
oracle时间循环的存储过程范例Oracle是一款广泛使用的关系型数据库管理系统,它支持使用存储过程来实现复杂的业务逻辑。
本文将以一个时间循环的存储过程为例,介绍如何在Oracle中编写和使用存储过程。
在实际开发中,经常会遇到需要根据时间进行循环操作的场景,比如每天定时执行某个任务,或者按照特定的时间间隔重复执行某个操作。
使用存储过程可以将这些循环逻辑封装起来,提高代码的复用性和可维护性。
下面我们以一个简单的例子来说明如何使用Oracle存储过程实现时间循环。
假设我们需要每天定时向用户发送一封电子邮件,提醒他们当天的待办事项。
我们可以通过存储过程来实现这个功能。
我们需要创建一个存储过程来发送邮件。
在存储过程中,我们可以使用Oracle提供的时间函数来获取当前日期,并根据日期来查询当天的待办事项。
然后,我们可以使用邮件服务的API来发送邮件给用户。
下面是一个简化的示例代码:```sqlCREATE OR REPLACE PROCEDURE send_email ASv_today DATE;v_subject VARCHAR2(100);v_body VARCHAR2(1000);BEGIN-- 获取当前日期v_today := SYSDATE;-- 构造邮件主题和内容v_subject := '今日待办事项提醒';v_body := '尊敬的用户,以下是您今天的待办事项:';-- 查询当天的待办事项-- SELECT * FROM todo_list WHERE due_date = v_today;-- 发送邮件给用户-- email_service.send_email('****************',v_subject, v_body);-- 打印日志DBMS_OUTPUT.PUT_LINE('邮件发送成功!');END;/```在上面的代码中,我们首先声明了一些变量来存储当前日期、邮件主题和内容。
executescalar 存储过程
executescalar 存储过程标题:深入理解与应用ExecuteScalar存储过程在数据库编程中,执行SQL命令是必不可少的环节。
而在这些命令中,有一种特殊且实用的操作——ExecuteScalar。
它主要用于执行存储过程并返回单个值。
本文将详细解析ExecuteScalar存储过程的概念、使用方法以及实际应用案例。
一、什么是ExecuteScalar存储过程存储过程是一种预编译的SQL语句集合,用户可以将其作为一个独立的单元来调用和执行。
它的主要优点包括提高性能、减少网络流量、增强安全性和实现代码重用等。
而ExecuteScalar是中SqlCommand类的一个方法,主要用于执行查询并返回结果集中的第一行第一列的值。
这个值通常是标量值,如整数、字符串或日期等。
如果查询没有返回任何数据或者返回多行或多列,ExecuteScalar将返回null。
二、如何使用ExecuteScalar存储过程以下是一个简单的示例,展示如何在C#中使用ExecuteScalar执行存储过程:csharpusing System.Data.SqlClient;创建连接字符串string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=True";创建SqlConnection对象using (SqlConnection connection = newSqlConnection(connectionString)){打开数据库连接connection.Open();创建SqlCommand对象,指定要执行的存储过程SqlCommand command = newSqlCommand("YourStoredProcedure", connection);mandType = CommandType.StoredProcedure;如果存储过程需要参数,可以如下添加command.Parameters.AddWithValue("ParameterName", "ParameterValue");执行存储过程并获取结果object result = command.ExecuteScalar();检查结果是否为nullif (result != null){转换并使用结果int intValue = (int)result;string stringValue = result.ToString();...}}在这个示例中,我们首先创建了一个SqlConnection对象并打开了数据库连接。
impala写存储过程实例
impala写存储过程实例
Impala 是 Cloudera 公司开发的一个开源分布式大规模并行处理(MPP)数据库引擎,它可以对存储在 Hadoop 分布式文件系统(HDFS)中的数据进行快速的交互式查询。
Impala 支持存储过程( Stored Procedure ),这使得用户可以在 Impala 中编写和执行复杂的 SQL 逻辑。
以下是一个简单的示例,展示如何在 Impala 中创建一个存储过程:
```sql
-- 创建一个存储过程
CREATE PROCEDURE my_proc()
AS
BEGIN
-- 这里写你的存储过程逻辑
SELECT * FROM my_table;
END;
```
在上述示例中,我们创建了一个名为 `my_proc` 的存储过程。
存储过程的逻辑可以包含各种 SQL 语句,例如查询、插入、更新、删除等。
要调用存储过程,可以使用以下语法:
```sql
CALL my_proc();
```
这将执行存储过程中的逻辑。
请注意,存储过程在 Impala 中是以分布式方式执行的,因此它们可以利用 Impala 的分布式计算能力。
你可以在存储过程中使用 Impala 的各种函数和表达式,以及引用其他表和视图。
请根据你的具体需求编写适当的存储过程逻辑,并根据需要进行调用。
希望这个示例对你有帮助。
如果你有任何其他问题,请随时提问。
达梦创建存储过程实例-概述说明以及解释
达梦创建存储过程实例-概述说明以及解释1.引言1.1 概述在信息化和数据化的时代背景下,数据库管理系统(DBMS)成为了管理和存储大量数据的重要工具。
达梦数据库是一种高性能、高安全性的关系型数据库管理系统,它提供了一系列强大的功能和工具,用于管理和操作数据库。
存储过程是数据库中一组预定义的SQL语句集合,可以被保存并以后被重复调用。
存储过程使得数据库的开发工作更加灵活和高效,可以通过简单的调用实现复杂的业务逻辑。
达梦数据库也支持创建存储过程,并且为开发人员提供了完善的存储过程开发和管理工具。
本文将以达梦数据库为例,介绍如何创建和使用存储过程。
首先,我们将对存储过程的概念和特点进行简要介绍。
然后,我们将详细讲解如何在达梦数据库中创建存储过程,并通过实例演示不同场景下存储过程的应用。
最后,我们将总结本文的主要内容,并展望存储过程在数据库开发中的未来发展趋势。
通过学习本文,读者将能够深入了解达梦数据库存储过程的基本原理和使用方法,提升数据库开发效率和程序性能,并为今后的数据库应用开发奠定扎实的基础。
1.2 文章结构文章结构部分的内容可以按照以下方式编写:2. 正文2.1 子章节12.1.1 要点12.1.2 要点22.2 子章节22.2.1 要点12.2.2 要点22.3 子章节32.3.1 要点12.3.2 要点2本文主要分为引言、正文和结论三个部分。
其中正文部分包含了三个子章节,分别是子章节1、子章节2和子章节3。
每个子章节下又包含了各自的要点。
通过这种层级结构,使得文章的结构更加清晰明了。
引言部分对文章的整体进行了概述,包括了概述、文章结构和目的三个方面的内容。
正文部分是文章的核心部分,具体展开了对达梦创建存储过程的实例的讲解。
结论部分对全文进行了总结,并对未来展望进行了描述。
这样的结构安排旨在使读者更好地理解文章内容,并能够按照章节的顺序逐步阅读,加深对达梦创建存储过程的理解。
同时,该结构也有助于作者更好地组织和表达思路,使文章更加清晰和条理。
oracle 存储过程优秀例子
oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储和执行SQL语句的过程。
它可以接受参数并返回结果,用于实现复杂的业务逻辑和数据操作。
下面是10个优秀的Oracle存储过程示例,展示了不同方面的功能和用法。
1. 创建表并插入数据```sqlCREATE PROCEDURE create_employee_table ASBEGINEXECUTE IMMEDIATE 'CREATE TABLE employee (id NUMBER, name VARCHAR2(100))';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (1, ''John Doe'')';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (2, ''Jane Smith'')';END;```这个存储过程创建了一个名为employee的表,并插入了两条数据。
2. 更新员工姓名```sqlCREATE PROCEDURE update_employee_name(p_id NUMBER,p_name VARCHAR2) ASBEGINUPDATE employee SET name = p_name WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID和新的姓名作为参数,然后更新对应员工的姓名。
3. 删除员工记录```sqlCREATE PROCEDURE delete_employee(p_id NUMBER) AS BEGINDELETE FROM employee WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID作为参数,然后删除对应的员工记录。
存储过程简单案例以及使用方法
存储过程简单案例以及使用方法存储过程是一组预编译的SQL语句的集合,可以在数据库中进行存储和复用。
它是在数据库中创建的一段可被调用的代码,并且可以像其他代码一样被执行。
存储过程可以接收参数、返回结果,还可以包含条件逻辑和循环等控制结构。
在下面的案例中,我们将演示如何创建一个简单的存储过程,并使用该存储过程来执行一些基本的数据库操作。
第一步是创建一个用于存储过程的数据库。
我们可以使用MySQL命令行或可视化工具(如phpMyAdmin)在数据库中创建一个新的存储过程。
假设我们有一个名为“students”的数据库,其中包含一个名为“grades”的表。
表中包含学生的姓名和分数。
我们先创建一个存储过程来插入一条新的学生记录:```sqlDELIMITER$$CREATE PROCEDURE insert_student (IN name VARCHAR(255), IN grade INT)BEGININSERT INTO grades (name, grade) VALUES (name, grade);END$$DELIMITER;在上述代码中,我们使用DELIMITER指定了存储过程的分隔符。
创建存储过程时,我们使用CREATEPROCEDURE关键字定义存储过程的名字和参数。
在BEGIN和END之间,我们可以编写任意的SQL语句和控制结构。
接下来,我们可以调用这个存储过程来插入一条新的学生记录:```sqlCALL insert_student('John Doe', 90);```上述代码中,我们使用CALL关键字调用存储过程,并传递学生的姓名和分数作为参数。
我们还可以创建一个存储过程来更新学生的分数。
假设我们要将名字为"John Doe"的学生的分数更新为95:```sqlDELIMITER$$CREATE PROCEDURE update_grade (IN name VARCHAR(255), IN new_grade INT)BEGINUPDATE grades SET grade = new_grade WHERE name = name;END$$DELIMITER;然后,我们可以调用这个存储过程来更新学生的分数:```sqlCALL update_grade('John Doe', 95);```如果我们想获取学生的平均分数,我们可以创建一个存储过程来计算平均值:```sqlDELIMITER$$CREATE PROCEDURE calculate_averageBEGINDECLARE avg_grade FLOAT;SELECT AVG(grade) INTO avg_grade FROM grades;SELECT avg_grade;END$$DELIMITER;```在上述代码中,我们使用DECLARE关键字声明了一个局部变量avg_grade,用于存储平均分数。
存储过程实例1
CREATE OR REPLACE PROCEDURE TOOLD_T_JZZYW_YX_ALL IS/*****************************************功能:把新市库中的t_jzzyw_yx\t_jzzxx_yx\t_jzzyw_qtxx_yx增量转换到旧市库的T_JZZ_YW,T_JZZ_XX数据;时间:2013-02-25*****************************************/V_ERRORS VARCHAR2(200);V_N VARCHAR2(2);C_TABLE_NAME CONSTANT VARCHAR2(32) := 'T_JZZYW_YX';BEGINBEGIN/***************************判断新市库到旧市库的链路是否联通如果不通,则退出当次转换***************************/SELECT * INTO V_N FROM DUAL@KYXX;EXCEPTIONWHEN OTHERS THENV_ERRORS := SQLERRM;INSERT INTO T_ERROR_LOG_TOOLD(TYPE, ERRORMSG, XRSJ, YWID)VALUES(C_TABLE_NAME, V_ERRORS, SYSDATE, '链路不通,退出转换');COMMIT;RETURN;END;/*\*更新XZQ字段*\UPDATE KY_T_JZZYW_YX YXSET XZQ =(SELECT T3.XZQDM XZQFROM T_JZZXX_YX T, T_FWXX T1, T_FWXX_MPXX T2, V_XZQH_ZZJG T3 WHERE T.FWID = T1.IDAND T1.MPDM = T2.DMAND T2.XZQHDM = T3.DMAND JZZYWID = YX.ID);COMMIT;*/FOR I IN (SELECT A.ID AS ID,A.DJBID AS DJBID,C.DQYWHJ AS DQYWHJ,C.DQYWZT AS DQYWZT,A.SLLB AS SLLB,A.SLYY AS SLYY,A.SLRQ AS SLRQ,A.SLDWDM AS SLDWDM,A.SLR AS SLR,A.SFKS AS SFKS,A.SFDYLQPZ AS SFDYLQPZ, A.DYLQPZRQ AS DYLQPZRQ, A.SFYJF AS SFYJF,A.HZBH AS HZBH,A.HZFFRQ AS HZFFRQ,A.HZFFR AS HZFFR,A.SFSH AS SFSH,A.SHSFTG AS SHSFTG,A.SHBTGYY AS SHBTGYY, C.SHR AS SHR,A.SHRQ AS SHRQ,A.SHDW AS SHDW,A.SFZZ AS SFZZ,C.ZZDWDM AS ZZDWDM,A.ZZRQ AS ZZRQ,A.SFCXZZ AS SFCXZZ,A.BLSFFF AS BLSFFF,A.BLFFPH AS BLFFPH,A.BLFFDWDM AS BLFFDWDM, A.BLFFR AS BLFFR,A.BLFFRQ AS BLFFRQ,A.JSDWDM AS JSDWDM,A.JSR AS JSR,A.JSRQ AS JSRQ,A.SFFF AS SFFF,C.FFR AS FFR,A.FFDWDM AS FFDWDM,A.FFRQ AS FFRQ,B.XM AS LQR,A.LQRQ AS LQRQ,A.CXLX AS CXLX,A.CXNR AS CXNR,A.CXDW AS CXDW,A.CXR AS CXR,A.CXRQ AS CXRQ,A.SJCSPH AS SJCSPH,A.CJR AS CJR,A.CJSJ AS CJSJ,A.GXR AS GXR,A.GXSJ AS GXSJ,A.SFTH AS SFTH,A.SFZZYW AS SFZZYW,A.SFDCL AS SFDCL,A.SFCX AS SFCX,A.ZZSFCG AS ZZSFCG,A.ZZSBYY AS ZZSBYY,A.SFDZZ AS SFDZZ,A.DZZRQ AS DZZRQ,A.ZZPH AS ZZPH,A.CXZZCS AS CXZZCS,A.SLBH AS SLBH,B.GMSFHM AS LQRSFZH,A.KZZD1 AS KZZD1,A.KZZD2 AS KZZD2,A.KZZD3 AS KZZD3,A.KZZD4 AS KZZD4,A.KZZD5 AS KZZD5,A.KZZD6 AS KZZD6,C.FLAG AS FLAG,C.OPERATION AS OPERATION,C.XZQ AS XZQFROM KY_T_JZZYW_YX C, T_JZZXX_YX B, T_JZZYW_YX AWHERE A.ID = B.JZZYWIDAND A.ID = C.ID/*AND XZQ IS NOT NULL*/AND FLAG IS NULL) LOOP/***************************根据不同的操作类型,应用到新市库上***************************/BEGINIF I.OPERATION = 'DE'THEN/* DELETE FROM T_JZZ_YW@KYXX WHERE ID = I.ID;DELETE FROM T_JZZ_XX@KYXX WHERE ID = I.ID;*/NULL;ELSIF I.OPERATION = 'IN'THEN/*当t_jzzyw_yx的shsftg不为空且dqywhj为03、04、05、07、08、09、10时,如果id不存在于t_jzz_yw_sh ,就新增一条记录到t_jzz_yw_sh,如果存在,则修改*/IF I.SHR IS NOT NULL ANDI.DQYWHJ IN('03', '04'/*, '05', '07', '08', '09', '10'*/) THENINSERT INTO T_JZZ_YW_SH@KYXX(ID, SHR, SHDW, SHRQ, SHJG, SHBTGYY, CJR, CJSJ, ZHXGR, ZHXGSJ) SELECT ID, SHR, SHDW, SHRQ, SHJG, SHBTGYY, CJR, CJSJ, GXR, GXSJFROM T_JZZYW_SHWHERE ID = I.KZZD2;END IF;/*当t_jzzyw_yx的zzdwdm不为空且dqywhj为07、08、09、10时,如果id不存在于t_jzz_yw_zzxx,就新增一条记录到t_jzz_yw_zzxx,如果存在,则修改该记录*/IF I.ZZDWDM IS NOT NULL ANDI.DQYWHJ IN ('07', '08', '09'/*, '10'*/) THEN--V_ZZXXID := 'ZZXX' || ID_JZZ.NEXTVAL;INSERT INTO T_JZZ_YW_ZZXX@KYXX(ID, ZZDW, ZZRQ, ZZSFCG, ZZCWLXMC, CJR, CJSJ, ZHXGR, ZHXGSJ) SELECT ID,ZZDW,ZZRQ,ZZSFCG,ZZCWLXMC,CJR,CJSJ,ZHXGR,ZHXGSJFROM T_JZZ_YW_ZZXXWHERE ID = I.KZZD4;END IF;/* 当t_jzzyw_yx的FFR不为空且dqywhj为10时,新增一条记录到t_jzz_yw_ff*/IF I.FFR IS NOT NULL AND I.DQYWHJ = '10'THEN--V_FFID := 'FFID' || ID_JZZ.NEXTVAL;INSERT INTO T_JZZ_YW_FF@KYXX(ID, FFR, FFDW, FFSJ, LQRXM, LQRSFZH, CJR, CJSJ, ZHXGR, ZHXGSJ) VALUES(I.KZZD3,I.FFR,I.FFDWDM,I.FFRQ,I.LQR,I.LQRSFZH,I.CJR,I.CJSJ,I.GXR,I.GXSJ);END IF;INSERT INTO T_JZZ_YW@KYXX(ID,RYYWLSH,RYID,YWHJ,DQYWZT,SLLB,SLYY,SLRQ,SLDW,SLR,SFKS,SFDYLQPZ,DYLQPZSJ,SFYJF,SFZXZZ,CXRQ,CZZZCS,SLBH,CJR,CJSJ,ZHXGR,ZHXGSJ,JZZBH,XM,ZJHM,XB,CSRQ,MZ,DZ,ZZDZXZ,HZBH,JZZYXQX,JZZYXQSRQ, JZZYXJZRQ, BZRQ,JZZXPH,SFSCSB,SHENG,SHI,FWID,XIAN,ZYSCBZRQ, ZALFFJE,GBFJE,SHIJB,XZQ,JZ,FWZ,JWH,PQ,GAFJ,PCS,JDDM,MPDM,CZWBH,FWCSDZ,DWDZ,YDDH,ZZSY,DYHDZ,ZZMM,ZJXY,WHCD,QYBH,XZ,JTGJ,CPHM,LSRQ,HYZK,JHRQ,POXM,POZJLX,POZJHM,SFTZ,JSZLX,JSZHM,YZRQ,JSZYXRQ,BZ,JYZK,HDQK,CZHKSZD,QH,NANGS,NUGS,SFCB,ZY,PODZ,SG,RZRQ,FJH,ZZCS,JZFS,TBR,TBRQ,DWDH,ZZID,SHID,FFID,ZZXXID,JCID,DBID,HJDH,DQYWHJ)SELECT A.ID,A.DJBID,A.RYID,A.DQYWHJ,NVL(A.DQYWZT, '2') AS DQYWZT,A.SLLB,A.SLYY,A.SLRQ,t6.xzqmc||t6.jzmc||t6.fwzmc||t6.jwhmc||t6.cmxzmc SLDW, A.SLR,A.SFKS,A.SFDYLQPZ,A.DYLQPZRQ,A.SFYJF,A.SFCXZZ,A.CXRQ,A.CXZZCS,A.SLBH,A.CJR,A.CJSJ,A.GXR,A.GXSJ,A.SLBH,B.XM,B.GMSFHM,B.XBDM,B.CSRQ,B.MZDM,B.HJDZ,B.JZDZ,NVL(T.HZBH, T.BZ),B.YXQX,B.YXQSRQ,B.YXJZRQ,B.SLRQ,B.XPH,B.SFSCSB,SUBSTR(B.GMSFHM, 0, 2), SUBSTR(B.GMSFHM, 0, 4), B.FWID,B.HJQXDM,B.ZYSCBZRQ,B.ZALFFJE,B.GBFJE,'4406',T4.XZQDM XZQ,T4.JZDM JZ,T4.FWZDM FWZ,T4.JWHDM JWH,T4.CMXZDM PQ,T5.GAFJ,T2.PCS,T2.JLXDM JDDM,T1.MPDM,T1.DABH CZWBH,C.FWCSDZ,C.YDDH,NVL(C.ZZSY, '99'),NVL(D.DYHDZ, E.DYHDZ),COALESCE(D.ZZMM, E.ZZMM,'13'),NVL(D.ZJXY, E.ZJXY),COALESCE(D.WHCD, E.WHCD,'80'),NVL(D.DWID, E.DWID),NVL(D.HJXZ, E.HJXZ),NVL(D.JTGJ, '03') AS JTGJ,NVL(D.CPHM, E.CPHM),COALESCE(D.LSRQ, E.LSRQ,D.TBSJ,SYSDATE), COALESCE(D.HYZK, E.HYZK,'1'),NVL(D.JHRQ, E.JHRQ),NVL(D.POXM, E.POXM),NVL(D.POZJLX, E.POZJLX),NVL(D.POZJHM, E.POZJHM),NVL(D.SFTZ, E.SFTZ),NVL(D.JSZLX, E.JSZLX),NVL(D.JSZHM, E.JSZHM),NVL(D.YZRQ, E.YZRQ),NVL(D.JSZYXRQ, E.JSZYXRQ),NVL(D.BZ, E.BZ),COALESCE(D.JYZK, E.JYZK,'2'),NVL(D.HDQK, E.HDQK),NVL(D.CZHKSZD, E.CZHKSZD),NVL(D.HJQH, E.HJQH),NVL(D.NANGS, E.NANGS),NVL(D.NUGS, E.NUGS),NVL(D.SFCB, E.SFCB),NVL(D.ZY, E.ZY),NVL(D.POHJDZ, E.POHJDZ),NVL(D.SG, E.SG),NVL(D.RZRQ, E.RZRQ),NVL(D.FJH, E.FJH),NVL(D.ZZCS, '无'),COALESCE(D.JZFS, E.JZFS,'05'),NULL,NULL,NULL,NULL,I.KZZD2,I.KZZD4,NULL,NULL,NULL,(CASEWHEN A.DQYWHJ IN ('01', '02') THEN'1'WHEN A.DQYWHJ IN('03', '04', '05', '07', '08', '09') THEN'2'WHEN A.DQYWHJ = '06'THEN'8'WHEN A.DQYWHJ = '10'THEN'7'END) DQYWHJFROM T_JZZYW_YX A,T_JZZXX_YX B,T_JZZYW_QTXX_YX C,T_LDRK_DJB D,T_LDRK_DJB_ZXQK E,T_LDRK_XP T,T_FWXX T1,T_FWXX_MPXX T2,T_FWXX_JLX T3,V_XZQH_ZZJG T4,T_XZQH_QX T5,V_XZQH_ZZJG t6WHERE A.ID = B.JZZYWIDAND A.ID = C.JZZYWIDAND A.DJBID = D.ID(+)AND A.DJBID = E.ID(+)AND T.ID(+) = B.XPIDAND B.FWID = T1.IDAND T1.MPDM = T2.DMAND T2.JLXDM = T3.DMAND T2.XZQHDM = T4.DMAND T4.XZQDM = T5.DMAND a.sldwdm= t6.dmAND A.ID = I.ID;IF I.DQYWHJ = '10'THENINSERT INTO T_JZZ_XX@KYXX(ID,SLRQ,SLDW,SLR,SLBH,JZZBH,ZZDW,ZZRQ,FFR,FFDW,FFSJ,XM,ZJHM,XB,CSRQ,MZ,DZ,ZZDZXZ,HZBH,CJR,CJSJ,ZHXGR,ZHXGSJ,JZZYXQX,JZZYXQSRQ, JZZYXJZRQ, BZRQ,JZZXPH,SFSCSB,SHENG,SHI,JZZZT,FWID,XIAN,ZYSCBZRQ, SHIJB,XZQ,JZ,FWZ,JWH,PQ,GAFJ,PCS,JDDM,CZWBH,FWCSDZ, DWDZ,YDDH,ZZSY,DYHDZ,ZZMM,ZJXY,WHCD,QYBH,XZ,JTGJ,CPHM,LSRQ,HYZK,JHRQ,POXM,POZJLX, POZJHM, SFTZ,JSZLX,JSZHM,YZRQ,JSZYXRQ, BZ,JYZK,HDQK,CZHKSZD, QH,NANGS,NUGS,SFCB,ZY,PODZ,SG,RZRQ,FJH,ZZCS,JZFS,TBR,TBRQ,DWDH,HJDH,SELECT A.ID,A.RYID,A.SLRQ,t6.xzqmc||t6.jzmc||t6.fwzmc||t6.jwhmc||t6.cmxzmc SLDW,A.SLR,A.SLBH,A.SLBH,A.ZZDWDM,A.ZZRQ,A.FFR,A.FFDWDM,A.FFRQ,B.XM,B.GMSFHM,B.XBDM,B.CSRQ,B.MZDM,B.HJDZ,B.JZDZ,NVL(T.HZBH, T.BZ),B.CJR,B.CJSJ,B.GXR,B.GXSJ,B.YXQX,B.YXQSRQ,B.YXJZRQ,B.SLRQ,B.XPH,B.SFSCSB,SUBSTR(B.GMSFHM, 0, 2),SUBSTR(B.GMSFHM, 0, 4),B.JZZZT,B.FWID,B.HJQXDM,B.ZYSCBZRQ,'4406',T4.XZQDM,T4.JZDM,T4.FWZDM,T4.JWHDM,T4.CMXZDM PQ,T2.PCS,T2.JLXDM,T1.MPDM,T1.DABH,C.FWCS,C.FWCSDZ,C.YDDH,NVL(C.ZZSY, '99'),NVL(D.DYHDZ, E.DYHDZ),COALESCE(D.ZZMM, E.ZZMM,'13'),NVL(D.ZJXY, E.ZJXY),COALESCE(D.WHCD, E.WHCD,'80'),NVL(D.DWID, E.DWID),NVL(D.HJXZ, E.HJXZ),NVL(D.JTGJ, '03') AS JTGJ,NVL(D.CPHM, E.CPHM),COALESCE(D.LSRQ, E.LSRQ,D.TBSJ,SYSDATE), COALESCE(D.HYZK, E.HYZK,'1'),NVL(D.JHRQ, E.JHRQ),NVL(D.POXM, E.POXM),NVL(D.POZJLX, E.POZJLX),NVL(D.POZJHM, E.POZJHM),NVL(D.SFTZ, E.SFTZ),NVL(D.JSZLX, E.JSZLX),NVL(D.JSZHM, E.JSZHM),NVL(D.YZRQ, E.YZRQ),NVL(D.JSZYXRQ, E.JSZYXRQ),NVL(D.BZ, E.BZ),COALESCE(D.JYZK, E.JYZK,'2'),NVL(D.HDQK, E.HDQK),NVL(D.CZHKSZD, E.CZHKSZD),NVL(D.HJQH, E.HJQH),NVL(D.NANGS, E.NANGS),NVL(D.NUGS, E.NUGS),NVL(D.SFCB, E.SFCB),NVL(D.ZY, E.ZY),NVL(D.POHJDZ, E.POHJDZ),NVL(D.SG, E.SG),NVL(D.RZRQ, E.RZRQ),NVL(D.FJH, E.FJH),NVL(D.ZZCS, '无'),COALESCE(D.JZFS, E.JZFS,'05'),B.XM,NULL,NULL,NULLFROM T_JZZYW_YX A,T_JZZXX_YX B,T_JZZYW_QTXX_YX C,T_LDRK_DJB D,T_LDRK_DJB_ZXQK E,T_LDRK_XP T,T_FWXX T1,T_FWXX_MPXX T2,T_FWXX_JLX T3,V_XZQH_ZZJG T4,T_XZQH_QX T5,V_XZQH_ZZJG T6WHERE A.ID = B.JZZYWIDAND A.ID = C.JZZYWIDAND A.DJBID = D.ID(+)AND A.DJBID = E.ID(+)AND T.ID(+) = B.XPIDAND B.FWID = T1.IDAND T1.MPDM = T2.DMAND T2.JLXDM = T3.DMAND T2.XZQHDM = T4.DMAND T4.XZQDM = T5.DMAND a.sldwdm = t6.dmAND A.ID = I.ID;END IF;ELSIF I.OPERATION = 'UN'THEN/*当t_jzzyw_yx的shsftg不为空且dqywhj为03、04、05、07、08、09、10时,如果id不存在于t_jzz_yw_sh ,就新增一条记录到t_jzz_yw_sh,如果存在,则修改*/IF I.SHR IS NOT NULL ANDI.DQYWHJ IN('03', '04'/*, '05', '07', '08', '09', '10'*/) THENINSERT INTO T_JZZ_YW_SH@KYXX(ID, SHR, SHDW, SHRQ, SHJG, SHBTGYY, CJR, CJSJ, ZHXGR, ZHXGSJ) SELECT ID, SHR, SHDW, SHRQ, SHJG, SHBTGYY, CJR, CJSJ, GXR, GXSJFROM T_JZZYW_SHWHERE ID = I.KZZD2;END IF;/*当t_jzzyw_yx的zzdwdm不为空且dqywhj为07、08、09、10时,如果id不存在于t_jzz_yw_zzxx,就新增一条记录到t_jzz_yw_zzxx,如果存在,则修改该记录*/IF I.ZZDWDM IS NOT NULL ANDI.DQYWHJ IN ('07', '08', '09'/*, '10'*/) THEN--V_ZZXXID := 'ZZXX' || ID_JZZ.NEXTVAL;INSERT INTO T_JZZ_YW_ZZXX@KYXX(ID, ZZDW, ZZRQ, ZZSFCG, ZZCWLXMC, CJR, CJSJ, ZHXGR, ZHXGSJ) SELECT ID,ZZDW,ZZRQ,ZZSFCG,ZZCWLXMC,CJR,CJSJ,ZHXGR,ZHXGSJFROM T_JZZ_YW_ZZXXWHERE ID = I.KZZD4;END IF;/* 当t_jzzyw_yx的FFR不为空且dqywhj为10时,新增一条记录到t_jzz_yw_ff*/IF I.FFR IS NOT NULL AND I.DQYWHJ = '10'THEN--V_FFID := 'FFID' || ID_JZZ.NEXTVAL;INSERT INTO T_JZZ_YW_FF@KYXX(ID, FFR, FFDW, FFSJ, LQRXM, LQRSFZH, CJR, CJSJ, ZHXGR, ZHXGSJ) VALUES(I.KZZD3,I.FFR,I.FFDWDM,I.FFRQ,I.LQR,I.LQRSFZH,I.CJR,I.CJSJ,I.GXR,I.GXSJ);END IF;UPDATE T_JZZ_YW@KYXXSET (ID,RYYWLSH,RYID,YWHJ,DQYWZT,SLLB,SLYY,SLRQ,SLDW,SLR,SFKS,SFDYLQPZ,DYLQPZSJ,SFYJF,SFZXZZ,CXRQ,CZZZCS,SLBH,CJR,CJSJ,ZHXGR,ZHXGSJ,JZZBH,XM,ZJHM,XB,CSRQ,MZ,DZ,ZZDZXZ,HZBH,JZZYXQX,JZZYXQSRQ,JZZYXJZRQ,BZRQ,JZZXPH,SFSCSB,SHENG,SHI,FWID,ZYSCBZRQ, ZALFFJE, GBFJE,SHIJB,XZQ,JZ,FWZ,JWH,PQ,GAFJ,PCS,JDDM,MPDM,CZWBH,FWCSDZ,DWDZ,YDDH,ZZSY,DYHDZ,ZZMM,ZJXY,WHCD,QYBH,XZ,JTGJ,CPHM,LSRQ,HYZK,JHRQ,POXM,POZJLX,POZJHM,SFTZ,JSZLX,JSZHM,YZRQ,JSZYXRQ, BZ,JYZK,HDQK,CZHKSZD, QH,NANGS,SFCB,ZY,PODZ,SG,RZRQ,FJH,ZZCS,JZFS,TBR,TBRQ,DWDH,ZZID,SHID,FFID,ZZXXID,JCID,DBID,HJDH,DQYWHJ) =(SELECT A.ID,A.DJBID,A.RYID,A.DQYWHJ,NVL(A.DQYWZT, '2') AS DQYWZT,A.SLLB,A.SLYY,A.SLRQ,t6.xzqmc||t6.jzmc||t6.fwzmc||t6.jwhmc||t6.cmxzmc SLDW,A.SLR,A.SFKS,A.SFDYLQPZ,A.DYLQPZRQ,A.SFYJF,A.SFCXZZ,A.CXRQ,A.CXZZCS,A.SLBH,A.CJR,A.CJSJ,A.GXR,A.GXSJ,A.SLBH,B.XM,B.GMSFHM,B.XBDM,B.CSRQ,B.MZDM,B.HJDZ,B.JZDZ,NVL(T.HZBH, T.BZ),B.YXQX,B.YXQSRQ,B.YXJZRQ,B.SLRQ,B.XPH,B.SFSCSB,SUBSTR(B.GMSFHM, 0, 2),SUBSTR(B.GMSFHM, 0, 4),B.FWID,B.HJQXDM,B.ZYSCBZRQ,B.ZALFFJE,B.GBFJE,'4406',T4.XZQDM XZQ,T4.JZDM JZ,T4.FWZDM FWZ,T4.JWHDM JWH,T4.CMXZDM PQ,T5.GAFJ,T2.PCS,T2.JLXDM JDDM,T1.MPDM,T1.DABH CZWBH,C.FWCS,C.FWCSDZ,C.YDDH,NVL(C.ZZSY, '99'),NVL(D.DYHDZ, E.DYHDZ),COALESCE(D.ZZMM, E.ZZMM,'13'), NVL(D.ZJXY, E.ZJXY),COALESCE(D.WHCD, E.WHCD,'80'), NVL(D.DWID, E.DWID),NVL(D.HJXZ, E.HJXZ),NVL(D.JTGJ, '03') AS JTGJ,NVL(D.CPHM, E.CPHM),COALESCE(D.LSRQ, E.LSRQ,D.TBSJ,SYSDATE),COALESCE(D.HYZK, E.HYZK,'1'),NVL(D.JHRQ, E.JHRQ),NVL(D.POXM, E.POXM),NVL(D.POZJLX, E.POZJLX),NVL(D.POZJHM, E.POZJHM),NVL(D.SFTZ, E.SFTZ),NVL(D.JSZLX, E.JSZLX),NVL(D.JSZHM, E.JSZHM),NVL(D.YZRQ, E.YZRQ),NVL(D.JSZYXRQ, E.JSZYXRQ),NVL(D.BZ, E.BZ),COALESCE(D.JYZK, E.JYZK,'2'),NVL(D.HDQK, E.HDQK),NVL(D.CZHKSZD, E.CZHKSZD),NVL(D.HJQH, E.HJQH),NVL(D.NANGS, E.NANGS),NVL(D.NUGS, E.NUGS),NVL(D.SFCB, E.SFCB),NVL(D.ZY, E.ZY),NVL(D.POHJDZ, E.POHJDZ),NVL(D.SG, E.SG),NVL(D.RZRQ, E.RZRQ),NVL(D.FJH, E.FJH),NVL(D.ZZCS, '无'),COALESCE(D.JZFS, E.JZFS,'05'),NULL,NULL,NULL,NULL,I.KZZD2,I.KZZD3,I.KZZD4,NULL,NULL,NULL,(CASEWHEN A.DQYWHJ IN ('01', '02') THEN'1'WHEN A.DQYWHJ IN('03', '04', '05', '07', '08', '09') THEN'2'WHEN A.DQYWHJ = '06'THEN'8'WHEN A.DQYWHJ = '10'THEN'7'END) DQYWHJFROM T_JZZYW_YX A,T_JZZXX_YX B,T_JZZYW_QTXX_YX C,T_LDRK_DJB D,T_LDRK_DJB_ZXQK E,T_LDRK_XP T,T_FWXX T1,T_FWXX_MPXX T2,T_FWXX_JLX T3,V_XZQH_ZZJG T4,T_XZQH_QX T5,v_xzqh_zzjg t6WHERE A.ID = B.JZZYWIDAND A.ID = C.JZZYWIDAND A.DJBID = D.ID(+)AND A.DJBID = E.ID(+)AND T.ID(+) = B.XPIDAND B.FWID = T1.IDAND T1.MPDM = T2.DMAND T2.JLXDM = T3.DMAND T2.XZQHDM = T4.DMAND T4.XZQDM = T5.DMAND a.sldwdm = t6.dmAND A.ID = I.ID)WHERE ID = I.ID;IF I.DQYWHJ = '10'THENINSERT INTO T_JZZ_XX@KYXX(ID,RYID,SLRQ,SLDW,SLR,SLBH,JZZBH,ZZDW,ZZRQ,FFR,FFDW,XM,ZJHM,XB,CSRQ,MZ,DZ,ZZDZXZ,HZBH,CJR,CJSJ,ZHXGR,ZHXGSJ,JZZYXQX,JZZYXQSRQ, JZZYXJZRQ, BZRQ,JZZXPH,SFSCSB,SHENG,SHI,JZZZT,FWID,XIAN,ZYSCBZRQ, SHIJB,XZQ,JZ,FWZ,JWH,PQ,GAFJ,PCS,JDDM,MPDM,CZWBH,FWCSDZ,DWDZ,YDDH,ZZSY,DYHDZ,ZZMM,ZJXY,WHCD,XZ,JTGJ,CPHM,LSRQ,HYZK,JHRQ,POXM,POZJLX,POZJHM,SFTZ,JSZLX,JSZHM,YZRQ,JSZYXRQ,BZ,JYZK,HDQK,CZHKSZD,QH,NANGS,NUGS,SFCB,ZY,PODZ,SG,RZRQ,FJH,ZZCS,JZFS,TBR,TBRQ,DWDH,HJDH,ZXBZ)SELECT A.ID,A.RYID,A.SLRQ,t6.xzqmc||t6.jzmc||t6.fwzmc||t6.jwhmc||t6.cmxzmc SLDW,A.SLR,A.SLBH,A.SLBH,A.ZZDWDM,A.ZZRQ,A.FFR,A.FFDWDM,A.FFRQ,B.XM,B.GMSFHM,B.XBDM,B.CSRQ,B.MZDM,B.HJDZ,B.JZDZ,NVL(T.HZBH, T.BZ),B.CJR,B.CJSJ,B.GXR,B.GXSJ,B.YXQX,B.YXQSRQ,B.YXJZRQ,B.SLRQ,B.XPH,B.SFSCSB,SUBSTR(B.GMSFHM, 0, 2), SUBSTR(B.GMSFHM, 0, 4), B.JZZZT,B.FWID,B.HJQXDM,B.ZYSCBZRQ,'4406',T4.XZQDM,T4.JZDM,T4.FWZDM,T4.JWHDM,T4.CMXZDM PQ,T5.GAFJ,T2.PCS,T2.JLXDM,T1.MPDM,T1.DABH,C.FWCS,C.FWCSDZ,C.YDDH,NVL(C.ZZSY, '99'),NVL(D.DYHDZ, E.DYHDZ),COALESCE(D.ZZMM, E.ZZMM,'13'),NVL(D.ZJXY, E.ZJXY),COALESCE(D.WHCD, E.WHCD,'80'),NVL(D.DWID, E.DWID),NVL(D.HJXZ, E.HJXZ),NVL(D.JTGJ, '03') AS JTGJ,NVL(D.CPHM, E.CPHM),COALESCE(D.LSRQ, E.LSRQ,D.TBSJ,SYSDATE), COALESCE(D.HYZK, E.HYZK,'1'),NVL(D.JHRQ, E.JHRQ),NVL(D.POXM, E.POXM),NVL(D.POZJLX, E.POZJLX),NVL(D.POZJHM, E.POZJHM),NVL(D.SFTZ, E.SFTZ),NVL(D.JSZLX, E.JSZLX),NVL(D.JSZHM, E.JSZHM),NVL(D.YZRQ, E.YZRQ),NVL(D.JSZYXRQ, E.JSZYXRQ),NVL(D.BZ, E.BZ),COALESCE(D.JYZK, E.JYZK,'2'),NVL(D.HDQK, E.HDQK),NVL(D.CZHKSZD, E.CZHKSZD),NVL(D.HJQH, E.HJQH),NVL(D.NANGS, E.NANGS),NVL(D.NUGS, E.NUGS),NVL(D.SFCB, E.SFCB),NVL(D.ZY, E.ZY),NVL(D.POHJDZ, E.POHJDZ),NVL(D.SG, E.SG),NVL(D.RZRQ, E.RZRQ),NVL(D.FJH, E.FJH),NVL(D.ZZCS, '无'),COALESCE(D.JZFS, E.JZFS,'05'),B.XM,B.SLRQ,NULL,NULL,NULLFROM T_JZZYW_YX A,T_JZZXX_YX B,T_JZZYW_QTXX_YX C,T_LDRK_DJB D,T_LDRK_DJB_ZXQK E,T_LDRK_XP T,T_FWXX T1,T_FWXX_MPXX T2,T_FWXX_JLX T3,V_XZQH_ZZJG T4,T_XZQH_QX T5,V_XZQH_ZZJG T6WHERE A.ID = B.JZZYWIDAND A.ID = C.JZZYWIDAND A.DJBID = D.ID(+)AND A.DJBID = E.ID(+)AND T.ID(+) = B.XPIDAND B.FWID = T1.IDAND T1.MPDM = T2.DMAND T2.JLXDM = T3.DMAND T2.XZQHDM = T4.DMAND T4.XZQDM = T5.DMAND a.sldwdm = t6.dmAND A.ID = I.ID;END IF;END IF;/*打上标志,确认该条数据已经转换成功*/UPDATE KY_T_JZZYW_YX SET FLAG = 'Y'WHERE ID = I.ID;EXCEPTIONWHEN OTHERS THENROLLBACK;V_ERRORS := SUBSTR(SQLERRM, 1, 200);UPDATE KY_T_JZZYW_YX SET FLAG = 'N'WHERE ID = I.ID;INSERT INTO T_ERROR_LOG_TOOLD(TYPE, ERRORMSG, XRSJ, YWID)VALUES(C_TABLE_NAME, V_ERRORS, SYSDATE, I.ID);END;COMMIT;END LOOP;/*删除OPERATION='DE'的数据*/UPDATE KY_T_JZZYW_YX SET FLAG = 'Y'WHERE OPERATION = 'DE';DELETE FROM T_JZZ_YW@KYXXWHERE ID IN (SELECT ID FROM KY_T_JZZYW_YX A WHERE OPERATION = 'DE');DELETE FROM T_JZZ_XX@KYXXWHERE ID IN (SELECT ID FROM KY_T_JZZYW_YX A WHERE OPERATION = 'DE'); COMMIT;/*把已经转换到新库的数据放到历史表中,进行归档*/INSERT INTO KY_T_JZZYW_YX_GD(ID,DJBID,RYID,DQYWHJ,DQYWZT,SLLB,SLYY,SLRQ,SLDWDM,SLR,SFKS,SFDYLQPZ,DYLQPZRQ,SFYJF,HZBH,HZFFRQ,HZFFR,SFSH,SHSFTG,SHBTGYY,SHR,SHRQ,SHDW,SFZZ,ZZDWDM,ZZRQ,SFCXZZ,BLSFFF,BLFFPH,BLFFDWDM,BLFFR,BLFFRQ,JSDWDM,JSR,JSRQ,SFFF,FFR,FFDWDM,FFRQ,LQR,LQRQ,CXLX,CXNR,CXDW,CXR,CXRQ,BZ,SJCSPH,CJR,CJSJ,GXR,GXSJ,SFTH,SFZZYW,SFDCL,SFCX,ZZSFCG,ZZSBYY,SFDZZ,DZZRQ,ZZPH,CXZZCS,SLBH,LQRSFZH,KZZD1,KZZD2,KZZD3,KZZD4,KZZD5,KZZD6,FLAG,OPERATION, XZQ,XRSJ)SELECT ID,DJBID,RYID,DQYWHJ,DQYWZT,SLLB,SLYY,SLRQ,SLDWDM,SLR,SFKS,SFDYLQPZ, DYLQPZRQ, SFYJF,HZBH,HZFFRQ,HZFFR,SFSH,SHSFTG,SHBTGYY, SHR,SHRQ,SHDW,SFZZ,ZZDWDM,ZZRQ,SFCXZZ,BLSFFF,BLFFPH,BLFFDWDM, BLFFR,BLFFRQ,JSDWDM,JSR,JSRQ,SFFF,FFR,FFDWDM,FFRQ,LQR,LQRQ,CXLX,CXNR,CXDW,CXR,CXRQ,BZ,SJCSPH,CJR,CJSJ,GXR,GXSJ,SFTH,SFZZYW,SFDCL,SFCX,ZZSFCG,ZZSBYY,SFDZZ,DZZRQ,ZZPH,CXZZCS,SLBH,LQRSFZH,KZZD1,KZZD2,KZZD3,KZZD4,KZZD5,KZZD6,FLAG,OPERATION,XZQ,SYSDATEFROM KY_T_JZZYW_YXWHERE FLAG = 'Y';DELETE FROM KY_T_JZZYW_YX WHERE FLAG = 'Y'; COMMIT;END TOOLD_T_JZZYW_YX_ALL;。
sqlserver存储过程举例
sqlserver存储过程举例SQL Server存储过程是一段预先编译好的SQL代码,能够被多次执行。
它可以接受输入参数并返回输出参数,还可以执行逻辑判断和循环等复杂操作。
下面我列举了10个例子来展示SQL Server存储过程的使用。
1. 创建新的存储过程:```sqlCREATE PROCEDURE sp_CreateNewEmployee@FirstName NVARCHAR(50),@LastName NVARCHAR(50),@Salary FLOATASBEGININSERT INTO Employees (FirstName, LastName, Salary)VALUES (@FirstName, @LastName, @Salary)END```这个存储过程用于向Employees表中插入新的员工记录。
2. 更新存储过程:```sqlCREATE PROCEDURE sp_UpdateEmployeeSalary@EmployeeID INT,@NewSalary FLOATASBEGINUPDATE EmployeesSET Salary = @NewSalaryWHERE EmployeeID = @EmployeeID END```这个存储过程用于更新指定员工的薪水。
3. 删除存储过程:```sqlCREATE PROCEDURE sp_DeleteEmployee @EmployeeID INTASBEGINDELETE FROM EmployeesWHERE EmployeeID = @EmployeeID END```这个存储过程用于删除指定员工的记录。
4. 查询存储过程:```sqlCREATE PROCEDURE sp_GetEmployeeByID@EmployeeID INTASBEGINSELECT * FROM EmployeesWHERE EmployeeID = @EmployeeIDEND```这个存储过程用于根据员工ID查询员工信息。
sqlserver存储过程例子
sqlserver存储过程例子SQL Server是一种关系型数据库管理系统,它支持存储过程,存储过程是一组预编译的SQL语句,可以接收参数并返回结果。
它可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。
下面列举了10个符合要求的存储过程例子。
1. 查询指定部门的员工数量该存储过程接收部门ID作为参数,然后使用COUNT函数查询该部门的员工数量,并返回结果。
2. 插入新员工信息该存储过程接收员工的姓名、部门ID等信息作为参数,然后使用INSERT语句将员工信息插入到数据库中。
3. 更新员工信息该存储过程接收员工ID和要更新的信息作为参数,然后使用UPDATE语句将指定员工的信息更新到数据库中。
4. 删除员工信息该存储过程接收员工ID作为参数,然后使用DELETE语句将指定员工的信息从数据库中删除。
5. 查询员工薪水排名该存储过程使用RANK函数查询员工薪水排名,并返回结果。
6. 查询员工平均薪水该存储过程使用AVG函数计算员工的平均薪水,并返回结果。
7. 查询员工工资总和该存储过程使用SUM函数计算员工的工资总和,并返回结果。
8. 查询员工工龄该存储过程使用DATEDIFF函数计算员工的工龄,并返回结果。
9. 查询员工信息及其所在部门名称该存储过程使用JOIN语句连接员工表和部门表,查询员工信息及其所在部门名称,并返回结果。
10. 查询员工信息及其直接上级该存储过程使用自连接查询,查询员工信息及其直接上级的信息,并返回结果。
以上是10个符合要求的SQL Server存储过程例子。
它们可以用于实现各种不同的业务逻辑,提高数据库的性能和安全性。
通过合理使用存储过程,可以减少重复的代码编写,提高开发效率,同时还可以提高系统的可维护性和可扩展性。
Oracle存储过程应用实例
Oracle存储过程应⽤实例引⼦记录⼯作过程中特耗时间的⼀个问题的优化过程。
核⼼⽣产环境,有专门的系统有专⼈维护基础配置数据,如销管数据。
⽽测试环境⽆维护,这些数据都有有效期,经常遇到过期,导致系统⽆法正常使⽤。
以往的解决办法:1 ⾸先要联系到外围管理系统(销售管理)相关责任⼈,协助在测试环境同步做配置(这涉及到跨团队的沟通);2 配置完审核通过后,待定时同步核⼼,确认⽆误后可使⽤(需等待,特耗时间)。
新解决⽅案:由于不需要监管报备的配置信息,⽣产配置信息更加准确,所以确定写数据库存过,迁移⽣产环境配置数据到测试。
⽅案1⼯具:数据库存过思路:数据库新建导⼊表T_IMPORT_TABLE,保存待操作表。
按顺序遍历这些表,在遍历过程中先删表中符合条件的数据,然后将⽣产环境符合条件的数据迁⼊到当前环境中/*****************************************************************************\* Name: P_IMPORT_CHA_DATA* PROCEDURE: 导⽣产环境基础数据(代理⼈信息)* Paramater: IC_C_CHA_CDE 代理⼈代码* Programmer: lyt* Date: 2019/10/12* Update:* 需导⼊表配置:T_IMPORT_TABLE WHERE C_MARK = '2';* 维护dbquery中间库表结构:SELECT 'CREATE TABLE T_' || C_TABLE || ' AS SELECT * FROM ZSSYS.' || C_TABLE || ' WHERE ROWNUM = 0;',A.* FROM T_IMPORT_TABLE A;* 如果⼿续费打包时提⽰:算税平台找不到该代理⼈,需联系算税平台(沈⼀栋)邵先路,将算税⽣产环境信息同步到对应环境\*****************************************************************************/PROCEDURE P_IMPORT_CHA_DATA(IC_C_CHA_CDE VARCHAR2) ASLB_SQL CLOB;LB_COLS CLOB;LB_COND CLOB;LN_ROWS NUMBER;CURSOR CUR_TABLE ISSELECT * FROM T_IMPORT_TABLE WHERE C_MARK = '2';BEGINFOR LR_TABLE IN CUR_TABLE LOOPSELECT WM_CONCAT(COLUMN_NAME)INTO LB_COLSFROM USER_TAB_COLS@LINK_COREWHERE TABLE_NAME = 'T_' || UPPER(LR_TABLE.C_TABLE)ORDER BY COLUMN_ID;LB_COND := ' WHERE ';IF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_COM_ACCT') THENLB_COND := LB_COND || 'C_REL_CDE ';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER') THENLB_COND := LB_COND || 'C_CLNT_CDE ';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER_DTL' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_AUTH_CONFER') THENLB_COND := LB_COND || 'C_AGT_AGR_NO IN (SELECT C_AGT_AGR_NO FROM ZSSYS.WEB_CUS_CONFER WHERE C_CLNT_CDE';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_ORG_SALES') THENLB_COND := LB_COND || 'C_SLS_CDE IN(SELECT C_SLS_CDE FROM ZSSYS.WEB_CUS_CHA WHERE C_CHA_CDE';ELSELB_COND := LB_COND || 'C_CHA_CDE ';END IF;IF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER_DTL' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_AUTH_CONFER' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_ORG_SALES') THENLB_COND := LB_COND || '= ''' || IC_C_CHA_CDE || ''')';ELSELB_COND := LB_COND || '= ''' || IC_C_CHA_CDE || '''';END IF;LB_SQL := 'DELETE FROM ZSSYS.' || LR_TABLE.C_TABLE || LB_COND;EXECUTE IMMEDIATE LB_SQL;LB_SQL := 'INSERT INTO ZSSYS.' || LR_TABLE.C_TABLE || '(' || LB_COLS ||') SELECT ' || LB_COLS || ' FROM ' || 'ZSSYS.' ||LR_TABLE.C_TABLE || '@LINK_CORE '|| LB_COND;EXECUTE IMMEDIATE LB_SQL;END IF;END LOOP;--COMMIT;END P_IMPORT_CHA_DATA;⽅案2版本1.1存在问题:由于⼀些表之间存在外键约束,外键约束要求必须先删除⼦表的记录才能够删主表的记录,⽽插⼊数据时必须先插⼊主表的记录再插⼊⼦表的记录,⼀个循环中同时完成删除和插⼊这个设计不合理,即如果原始记录已存在删除操作会失败。
mysql创建存储过程案例
mysql创建存储过程案例MySQL创建存储过程是数据库管理中一个非常重要的技能,可以极大地简化我们对数据的操作。
下面,我将通过一个案例来详细说明如何使用MySQL创建存储过程。
案例:假设我们有一个用户数据表users,包含以下字段:id, username, password, email, create_time。
现在我们需要创建一个存储过程,根据用户名和密码查询用户信息,如果找到对应的用户,则返回用户信息,否则返回NULL。
步骤:第一步,打开MySQL客户端,连接到数据库。
第二步,创建一个存储过程,语法格式如下:CREATE PROCEDURE procedure_name (IN param1 datatype1, IN param2 datatype2, ...)BEGIN-- sql statementsEND;其中,procedure_name是存储过程名称,param1、param2等则是输入参数,datatype1、datatype2则是参数的数据类型。
在我们的案例中,存储过程名称为sp_get_user_info,输入参数为username和password,数据类型均为VARCHAR。
那么我们的创建过程语句如下:CREATE PROCEDURE `sp_get_user_info` (IN `username` VARCHAR(50), IN `password` VARCHAR(50))BEGINSELECT * FROM `users` WHERE `username`=username AND`password`=password;END;第三步,执行存储过程。
执行存储过程可以使用CALL语句,语法格式如下:CALL procedure_name(param1, param2, ...);在我们的案例中,执行语句如下:CALL `sp_get_user_info`('test', '123456');该语句会根据用户名test和密码123456去查询用户表users,如果找到对应的用户,则返回用户信息。
Oracle存储过程及调用
Oracle存储过程及调⽤Oracle存储过程语法Oracle的存储过程语法如下:create procedure 存储过程名称(随便取)is在这⾥可以定义常量、变量、游标、复杂数据类型这⾥可以定义变量、常量begin执⾏部分end;(2)带参数的存储过程语法:create procedure 存储过程名称(随便取) (变量1 数据类型,变量2 数据类型,...,变量n 数据类型)is在这⾥可以定义常量、变量、游标、复杂数据类型这⾥可以定义变量、常量begin执⾏部分end;(3)带输⼊、输出参数的存储过程语法:create procedure 存储过程名称(随便取) (变量1 in(或out) 数据类型,变量2 in(或out) 数据类型,...,变量n in(或out) 数据类型)is在这⾥可以定义常量、变量、游标、复杂数据类型这⾥可以定义变量、常量begin执⾏部分end;注意:⽤上⾯的语法创建存储过程时可能会碰到数据库中已经有了同名的存储过程,这样Oracle就会弹框报错,说名字已被现有对象使⽤。
解决⽅法有两种: ⽅法⼀:换个存储过程名 ⽅法⼆:在最开头的create procedure 之间加上 or replace 关键字,例如:create or replace procedure 存储过程名称。
但是这种⽅法不建议使⽤,因为这种⽅法会把之前同名的存储过程替换为你当前写的这个存储过程案例⼀:没参数的存储过程create replace procedure procedure_1isbegindbms_output.put_line('procedure_1.......');end;存储过程案例⼆:带参数的的存储过程create procedure procedure_2(v_i number,v_j number)isv_m number(5);begindbms_output.put_line('procedure_2.......');v_m := v_i + v_j;dbms_output.put_line(v_i||' + '||v_j||' = '||v_m);end;存储过程案例三:带输⼊、输出参数的存储过程存储过程的参数分为输⼊参数和输出参数,输⼊参数:输⼊参数⼀般会在变量名和数据类型之间加in来表⽰该参数是输⼊参数输出参数:输出参数⼀般会在变量名和数据类型之间加out来表⽰该变量是输出参数不写in和out的话,默认为输⼊参数create procedure procedure_3(v_i in number,v_j in number ,v_m out number)isbegindbms_output.put_line('procedure_3.......');v_m:=v_i - v_j;dbms_output.put_line(v_i||' - '||v_j||' = '||v_m);end;PL/SQL块中调⽤存储过程下⾯以调⽤上⾯三个存储过程为例declarev_param1 number(5):=2;v_param2 number(5):=8;v_result number(5);begin--调⽤上⾯案例⼀的存储过程procedure_1();--调⽤上⾯案例⼆的存储过程procedure_2(v_param1,v_param2);--调⽤上⾯案例三的存储过程procedure_3(v_param1,v_param2,v_result);dbms_output.put_line(v_result);end;/*执⾏结果:*/procedure_1.......procedure_2.......2 + 8 = 10procedure_3.......2 - 8 = -610java调⽤存储过程案例⼀:java调⽤没有返回值的存储过程要求:编写⼀个像数据库emp表插⼊⼀条编号为6666,姓名为张三,职位为MANAGER的记录/*存储过程*/create procedure procedure_4(v_empno emp.empno%type,v_ename emp.ename%type,v_job emp.job%type )isbegininsert into emp (empno,ename,job) values (v_empno,v_ename,v_job);end;//java调⽤存储过程public static void main(String[] args) {Connection conn=null;CallableStatement cs=null;ResultSet rs=null;//java调⽤存储过程try {Class.forName("oracle.jdbc.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.01:1521:orcl", "scott", "tiger");cs=conn.prepareCall("{call procedure_4(?,?,?)}");//给输⼊参数赋值cs.setInt(1, 6666);cs.setString(2, "张三");cs.setString(3, "MANAGER");cs.execute();//执⾏} catch (Exception e) {e.printStackTrace();}finally{closeResource(conn,cs,rs);//关闭资源}}//执⾏后就会向数据库的emp表中插⼊⼀条编号为6666,姓名为张三,职位为MANAGER的记录案例⼆:java调⽤返回单列单⾏的存储过程要求:编写⼀个根据员⼯编号查找员⼯姓名的存储过程,并⽤java调⽤该存储过程/*存储过程*/create procedure procedure_5(v_empno in emp.empno%type,v_ename out emp.ename%type)isbeginselect ename into v_ename from emp where empno=v_empno;end;//java调⽤存储过程public static void main(String[] args) {Connection conn=null;CallableStatement cs=null;ResultSet rs=null;try {Class.forName("oracle.jdbc.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.01:1521:orcl", "scott","tiger");cs=conn.prepareCall("{call procedure_5(?,?)}");cs.setInt(1, 6666);//给输⼊参数赋值/*指定输出参数的数据类型语法:oracle.jdbc.OracleTypes.输出参数的数据类型此例输出参数的数据类型是varchar,所以是oracle.jdbc.OracleTypes.VARCHAR*/cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);cs.execute();//执⾏//获取输出参数的值,位置要和输出参数对应?的位置对应起来,该例输出参数对应第2个问号,⽽且输出参数的数据类型为字符型,所以是cs.getString(2) String a=cs.getString(2);System.out.println("员⼯姓名:"+a);} catch (Exception e) {e.printStackTrace();}finally{closeResource(conn,cs,rs);//关闭资源}}/*执⾏结果,控制台打印:*/结果:员⼯姓名:张三案例三:java调⽤返回单⾏多列的存储过程要求:编写⼀个根据员⼯编号查找员⼯姓名、职位和⼯资的存储过程,并⽤java调⽤该存储过程/*存储过程*/create procedure procedure_6(v_empno in emp.empno%type,v_ename out emp.ename%type,v_job out emp.job%type,v_sal out emp.sal%type)isbeginselect ename,job,sal into v_ename,v_job,v_sal from emp where empno=v_empno;end;//java调⽤存储过程public static void main(String[] args) {Connection conn=null;CallableStatement cs=null;ResultSet rs=null;try {Class.forName("oracle.jdbc.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.01:1521:orcl", "scott","tiger");cs=conn.prepareCall("{call procedure_6(?,?,?,?)}");cs.setInt(1, 7788);//指定输出参数的数据类型,注意:顺序要对应起来cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);cs.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR);cs.registerOutParameter(4, oracle.jdbc.OracleTypes.DOUBLE);cs.execute();//执⾏//获取返回值String ename=cs.getString(2);//获取姓名String job=cs.getString(3);//获取职位double sal=cs.getDouble(4);//获取薪⽔System.out.println("员⼯编号为7788的姓名为:"+ename+" 职位是:"+job+" 薪⽔是:"+sal);} catch (Exception e) {e.printStackTrace();}finally{closeResource(conn,cs,rs);//关闭资源}}/*执⾏结果,控制台打印:*/员⼯编号为7788的姓名为:SCOTT 职位是:ANALYST 薪⽔是:3000.0案例四:java调⽤返回多⾏多列(返回列表)的存储过程要求:编写⼀个根据部门编号查找部门所有员⼯信息的存储过程,并⽤java调⽤该存储过程/*定义游标*/create package my_package astype emp_cursor is ref cursor;end my_package;/*存储过程*/create procedure procedure_7(v_deptno in emp.deptno%type,emp_cursor out my_package.emp_cursor)isbeginopen emp_cursor for select * from emp where deptno=v_deptno;end;//java调⽤存储过程public static void main(String[] args) {Connection conn=null;CallableStatement cs=null;ResultSet rs=null;try {Class.forName("oracle.jdbc.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.01:1521:orcl", "scott","tiger");cs=conn.prepareCall("{call procedure_7(?,?)}");cs.setInt(1, 20);//给输⼊参数赋值cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR );//指定输出参数的数据类型cs.execute();rs=(ResultSet) cs.getObject(2);//获取输出参数的值while(rs.next()){//顺序为数据库中字段前后顺序,例如数据库emp表中第5列为hiredate,数据类型为Date,所以获取第5列值时就应该⽤rs.getDate(5) System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getDate(5));}} catch (Exception e) {e.printStackTrace();}finally{closeResource(conn,cs,rs);//关闭资源}}/*以下就是20号部门所有员⼯的信息,这⾥为⽅便我们只打印了编号、姓名和⼊职时间运⾏结果,控制台打印:*/7369 SMITH 1980-12-177566 JONES 1981-04-027788 SCOTT 1987-04-197876 ADAMS 1987-05-237902 FORD 1981-12-03这是上⾯java调⽤存储过程代码中关闭资源⽅法的代码public static void closeResource(Connection conn,CallableStatement cs,ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(cs!=null){try {cs.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}最后给个应⽤,分页的存储过程分页存储过程:/*定义游标*/create package page_package astype page_cursor is ref cursor;end page_package;/*存储过程*/create procedure pro_paging (v_page_size in number,--每页显⽰多少条v_page_count out number,--总页数v_current_page in number,--当前页v_total_count out number,--记录总条数emp_cursor out page_package.page_cursor--返回查询结果集的游标)isv_begin number(5):=v_page_size*(v_current_page-1)+1;--查询起始位置v_end number(5):=v_page_size*v_current_page;--查询结束位置v_sql varchar2(1000):='select empno,ename from(select a.empno,a.ename,rownum rn from(select empno,ename from emp) awhere rownum<='|| v_end ||') bwhere b.rn>='||v_begin;/*不能像下⾯这么写,不然调⽤该存储过程时会报类型不⼀致的错,因为最⾥⾯查的只有empno,ename,因此外⾯也要和⾥⾯保持⼀致 v_sql varchar2(1000):=\'select * from(select a.*,rownum rn from(select empno,ename from emp) awhere rownum<=\'|| v_end ||\') bwhere b.rn>='||v_begin;*/v_ename varchar2(10);v_empno number(4);beginopen emp_cursor for v_sql;loopfetch emp_cursor into v_empno,v_ename;exit when emp_cursor%notfound;dbms_output.put_line(v_empno||' '||v_ename);end loop;v_sql:='select count(empno) from emp';execute immediate v_sql into v_total_count;if(mod(v_total_count,v_page_size)=0) thenv_page_count:=v_total_count/v_page_size;elsev_page_count:=trunc(v_total_count/v_page_size)+1;end if;dbms_output.put_line('共 '||v_total_count||' 条记录');dbms_output.put_line('共 '||v_page_count||' 页');dbms_output.put_line('当前页: '||v_current_page);dbms_output.put_line('每页显⽰ '||v_page_size||' 条');end;Java调⽤的话和上⾯java调⽤存储过程的例⼦⼀样。
存储过程简单案例以及使用方法
存储过程简单案例以及使用方法
存储过程是一组预编译的SQL语句的集合,可以接受参数并返回结果。
它们用于在数据库中执行一系列操作,将其封装为一个单元以供重用。
存
储过程具有以下优点:提高性能、提高安全性、提高代码可读性。
下面是一个简单的存储过程示例,用于更新员工工资:
```sql
CREATE PROCEDURE UpdateSalary
AS
BEGIN
UPDATE Employees
END
```
要执行存储过程,可以使用以下语法:
```sql
EXEC UpdateSalary 1, 1000
```
以上语句将调用存储过程`UpdateSalary`,并传递参数值`1`和
`1000`。
存储过程将会将ID为1的员工的薪水增加1000。
存储过程还可以返回结果,例如要获取员工的薪水,可以创建如下存
储过程:
```sql
CREATE PROCEDURE GetSalary
AS
BEGIN
FROM Employees
END
```
要执行具有输出参数的存储过程,并获取结果,可以使用以下语法:```sql
```
在实际应用中,存储过程经常用于执行复杂的、频繁的数据库操作,例如批量插入、更新或删除数据,以及进行数据校验和处理。
通过使用存储过程,可以减少网络通信的开销,提高数据库性能。
总结起来,存储过程是一种在数据库中执行一系列操作的有效方式,并可以接受参数和返回结果。
通过创建存储过程,可以提高数据库性能、安全性和代码可读性。
同时,存储过程还可以在应用程序中重复调用以提高效率。
create procedure的例子
create procedure的例子
创建一个存储过程(Stored Procedure)是数据库编程中的一种常见做法,它允许你编写一段SQL代码并在以后多次调用它。
这样可以提高代码的重
用性和减少重复的SQL代码。
以下是一个使用SQL Server的创建存储过程的示例:
假设我们有一个名为`Employees`的表,其中包含员工的ID、姓名和工资。
我们想要创建一个存储过程,该过程接受一个参数(员工的ID),并返回
该员工的姓名和工资。
```sql
CREATE PROCEDURE GetEmployeeDetails
EmployeeID INT
AS
BEGIN
SELECT Name, Salary
FROM Employees
WHERE ID = EmployeeID
END
```
在上面的示例中,我们创建了一个名为`GetEmployeeDetails`的存储过程,它接受一个名为`EmployeeID`的整数参数。
存储过程的主体是一个
`SELECT`语句,它从`Employees`表中选择员工的姓名和工资,其中员工的ID必须等于传递给存储过程的参数值。
要调用这个存储过程并获取特定员工的详细信息,你可以使用以下SQL语句:
```sql
EXEC GetEmployeeDetails EmployeeID = 1;
```
这将执行存储过程并返回ID为1的员工的姓名和工资。
请注意,你可以将上述代码修改为适用于其他数据库管理系统的语法(如MySQL、Oracle或PostgreSQL等),因为创建和调用存储过程的原理是相似的。
namedparameterjdbctemplate 调用存储过程的例子
namedparameterjdbctemplate 调用存储过程的例子namedparameterjdbctemplate是Spring Framework中对JDBC的一个封装,它提供了一个更方便的方式去访问数据库,尤其是调用存储过程。
在实际应用中,我们经常需要使用存储过程来执行一些复杂的逻辑操作,如数据插入、更新和删除等。
下面是一个使用namedparameterjdbctemplate调用存储过程的例子:首先,我们需要创建一个数据库的连接配置,包括数据库的连接信息和数据源等。
配置示例如下:```xml<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataS ource"><property name="driverClassName"value="com.mysql.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="123456"/></bean><bean id="jdbcTemplate"class="dParame terJdbcTemplate"><constructor-arg ref="dataSource"/></bean>```接下来,我们创建一个存储过程调用的方法,方法中使用namedparameterjdbctemplate来执行存储过程。
存储过程实例精选
整理者为我实例1:只返回单一记录集的存储过程。
银行存款表(bankMoney)的内容如下要求1:查询表bankMoney的内容的存储过程create procedure sp_query_bankMoneyasselect * from bankMoneygoexec sp_query_bankMoney注* 在使用过程中只需要把中的SQL语句替换为存储过程名,就可以了很方便吧!实例2(向存储过程中传递参数):加入一笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总金额。
Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int outputwith encryption ---------加密asinsert bankMoney (id,userID,sex,Money)Values(@param1,@param2,@param3, @param4)select @param5=sum(Money) from bankMoney where userID='Zhangsan'go在SQL Server查询分析器中执行该存储过程的方法是:declare @total_price intexec insert_bank '004','Zhangsan','男',100,@total_price outputprint '总余额为'+convert(varchar,@total_price)go在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):1.以Return传回整数2.以output格式传回参数3.Recordset传回值的区别:output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。
opengauss数据库中存储过程的例题
【题目】opengauss数据库中存储过程的例题1. 什么是存储过程?2. 存储过程的优点及作用3. 存储过程的创建语法及例题分析4. 存储过程的调用语法及例题分析5. 存储过程的删除语法及例题分析6. 存储过程的注意事项及优化建议【正文】近年来,随着数据库技术的不断发展,存储过程作为一种数据库对象得到了广泛的应用。
在opengauss数据库中,存储过程可以提高数据库的执行效率,降低网络传输开销,同时也提供了一种复杂的编程能力。
本文将对opengauss数据库中存储过程的基本概念、创建、调用、删除语法以及注意事项进行介绍和分析,希望能够对读者有所帮助。
1. 什么是存储过程?存储过程是一组经过预编译的SQL语句和过程控制语句,存储在数据库中并能够被用户程序调用和执行的脚本。
存储过程能够在数据库中执行逻辑操作,通常用于完成特定的任务或者提供特定的功能。
在opengauss数据库中,存储过程通常以PL/pgSQL语言进行编写,其语法类似于PL/SQL。
存储过程可以包含变量定义、条件判断、循环等逻辑结构,使得数据库操作更加灵活和高效。
2. 存储过程的优点及作用存储过程在数据库中具有以下优点和作用:- 提高性能:存储过程在数据库中预编译,执行速度更快,能够减少网络传输开销。
- 降低网络流量:存储过程可以减少客户端和服务器端之间的通信次数,降低网络传输开销。
- 精简程序逻辑:将复杂的业务逻辑封装在存储过程中,减少了代码冗余,提高了代码的可维护性。
- 安全性高:存储过程可以在数据库中进行权限控制,避免了SQL注入等安全问题。
3. 存储过程的创建语法及例题分析在opengauss数据库中,创建存储过程的语法如下所示:```sqlCREATE OR REPLACE PROCEDURE procedure_name(parameters) LANGUAGE plpgsqlAS$$-- 存储过程的逻辑代码BEGIN-- 逻辑语句END$$;```下面以一个简单的存储过程例题进行分析:假设有一个名为`get_employee`的存储过程,其作用是获取employee表中指定ID的员工信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
char(65+ceiling(rand()*25)),
char(97+ceiling(rand()*25)),
cast(ceiling(rand()*9) as varchar(1)),
cast(ceiling(rand()*1000) as varchar(10)),
GO
create proc proc_selectProc
@procname varchar(30)
as
begin
select
'parameter_name' = name,
'length' = length,
'xprec' = xprec,
'scale' = odbcscale(xtype,xscale),
GO
create proc proc_selectdate
@Startdate datetime,
@Enddate datetime
as
begin
declare @temp datetime
set @temp=@Startdate
create table #tempdate(Startdate datetime primary key(Startdate),Enddate datetime)--创建临时表
'is_output' = isoutparam,
'type' = type_name(xusertype)
from syscolumns where id = object_id(@procname)
end
go
exec proc_selectProc 'proc_selectdate'
end
end
set @temp=DATEADD(dd,1,@temp)
end
select * from #tempdate
end
go
exec proc_selectdate '2014-1-1','2014-3-1'
go
查询存储过程的详细信息1 money,
decimal2 money,
datetime1 datetime,
datetime12 datetime
)
set @i=1
while( @i<11)
begin
insert into #adata values
dateadd(d,round(rand()*365,0),getdate()),
dateadd(d,round(rand()*365,0),getdate())
)
set @i=@i+1
end
select * from #adata
end
go
exec proc_selecttemp
string varchar(100) not null
)
as
begin
declare @i int,@splen int
select @splen=len(@sign),@i=charindex(@sign,@string)
while @i>0
begin
insert into @uf_StrSplit values(left(@string,@i-1))
字符串的差分输出
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[uf_StrSplit]') and OBJECTPROPERTY(id, N'IsFunction') = 1)
drop function uf_StrSplit
drop procedure [dbo].proc_selecttemp
go
create proc proc_selecttemp
as
begin
declare @i int
create table #adata
(
id int identity(1,1),
nvarchar1 varchar(10),
创建临时表,获取时间内的信息
if exists (select * from dbo.sysobjects where id = object_id(N'proc_selectdate') and OBJECTPROPERTY(id, N'IsProcedure') =1)
drop procedure proc_selectdate
go
--创建字符串分拆的函数
create function uf_StrSplit(
@string varchar(8000), --要分拆的字符串
@sign varchar(10) --字符串分隔符
)
returns @uf_StrSplit table(
id int identity(1,1) primary key,
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[proc_selectProc ]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure proc_selectProc
select @string=substring(@string,@i+@splen,8000),@i=charindex(@sign,@string)
end
if @string<>''
insert into @uf_StrSplit values(@string)
return
end
go
select * from uf_StrSplit('d,f,g,s,a,d,h,r,w,5,3,8,',',')
第四个存储过程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[proc_selecttemp]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
while(@temp<=@Enddate)
begin
if(datepart(dw,@temp)=2)
begin
if(DATEADD(dd,6,@temp)<@Enddate)
begin
insert into #tempdate values (@temp,DATEADD(day,6,@temp))