存储过程1
- 格式:ppt
- 大小:658.50 KB
- 文档页数:32
PostgreSQL-存储过程(⼀)基础篇存储过程其实就是函数,由⼀组 sql 语句组成,实现⽐较复杂的数据库操作;存储过程是存储在数据库服务器上的,⽤户可以像调⽤ sql ⾃带函数⼀样调⽤存储过程语法解析CREATE [OR REPLACE] FUNCTION function_name (arguments)RETURNS return_datatype AS $variable_name$DECLAREdeclaration;[...]BEGIN< function_body >[...]RETURN { variable_name | value }END; LANGUAGE plpgsql;很容易理解,不多解释下⾯我对⼀张表进⾏简单操作,逐步递进的介绍存储过程的语法步骤1-基础版into 表⽰把结果赋值给后⾯的变量,该变量必须在 declare 提前声明调⽤存储过程select mycount3()步骤2-把 sql 语句赋给变量create or replace function mycount3()returns integer as $$declaremysql text;counts integer;beginmysql:='select count("CD_ID") from "CDS"';execute mysql into counts;return counts;end;$$ language plpgsql;步骤3-带变量,且 sql 语句⽤字符串拼接create or replace function mycount4(tableName text, columnName text)returns text as $$declaremysql text;beginmysql:='select count('|| quote_ident(columnName)|| ') from '|| quote_ident(tableName);return mysql;end;$$ language plpgsql;1. 函数的参数必须声明类型2. || 表⽰字符串拼接符号3. 存储过程中的对象不能直接引⽤变量,要⽤ quote_ident,它的作⽤是为字符串加上双引号4. 在 sql 语句中,⼤写,全部会变成⼩写,如果想保留⼤写,需要加双引号调⽤存储过程select mycount4('CDS', 'CD_ID');返回select count("CD_ID") from "CDS"可以看到,输⼊参数是单引号,经过 quote_ident 后,⾃动变成双引号,保留了⼤写步骤4-换⼀种拼接⽅式,并且函数体加了 if 判断create or replace function mycount4(tableName text, columnName text)returns integer as $$declaremysql text;counts integer;beginmysql:='select count("' || $2 || '") from "' || $1 || '" ';execute mysql into counts using tableName, columnName;if counts > 100 thenreturn counts;else return 1;end if;end;$$ language plpgsql;1. ⽤ using 调取变量,此时需要⾃⼰加双引号以保留⼤写2. 112 对应的是函数的参数位置,跟 using 后的顺序⽆关3. if 后⾯有个 then4. text 可变长度字符串5. 每句末尾必须带分号。
mysql存储过程MySQL存储过程1. 存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。
它可以有SQL 语句和一些特殊的控制结构组成。
当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。
数据库中的存储过程可以看做是对编程中面向对象方法的模拟。
它允许控制数据的访问方式。
存储过程通常有以下优点:(1).存储过程增强了SQL语言的功能和灵活性。
存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。
存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。
而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。
如果某一操作包含大量的Transaction-SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。
因为存储过程是预编译的。
在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。
而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。
针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。
系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
高斯存储过程1. 引言存储过程(Stored Procedure)是在关系数据库中,用过程化语言编写的一组预定义的程序。
通过存储过程,可以将一系列的SQL语句和逻辑操作封装在一个单独的单元中,以便实现代码的复用和模块化开发。
在数据库管理系统(DBMS)中,高斯存储过程是一种以高斯数据库为基础的存储过程,提供丰富的功能和高性能的数据处理能力。
2. 高斯存储过程的特点高斯存储过程具有以下几个特点:2.1 高性能高斯存储过程采用了一系列优化策略,在执行时能够充分利用数据库的内部资源,以提高数据处理的效率。
它可以预编译、缓存和重用SQL语句,减少了SQL语句的解析和优化时间,从而大幅度提升了处理速度。
2.2 安全性高斯存储过程可以在数据库端运行,不需要将敏感的数据传输到客户端。
这样可以避免对数据进行不安全的操作和传输,有效提升了数据的安全性。
高斯存储过程还可以对用户进行权限管理,只有具备相应权限的用户才能执行存储过程。
2.3 可靠性高斯存储过程支持事务处理,可以确保数据库的一致性和完整性。
通过将一组操作放在一个事务中执行,可以将数据库从一个一致的状态转换到另一个一致的状态。
如果事务执行过程中出现错误,高斯存储过程还可以自动回滚,保证数据的完整性。
2.4 可维护性高斯存储过程将复杂的业务逻辑封装在一个单独的存储过程中,有助于提高代码的可维护性。
如果需要修改业务逻辑,只需要修改存储过程的代码,而不需要修改所有调用该存储过程的代码。
这种模块化的开发方式能够提高代码的复用性,减少了重复的工作量。
3. 高斯存储过程的应用场景高斯存储过程在各种数据库应用中有着广泛的应用场景,下面列举了一些常见的应用场景:3.1 数据校验和数据清洗在数据录入过程中,往往需要对输入的数据进行有效性检查和清洗。
高斯存储过程可以在数据插入或更新时自动进行数据校验,确保数据的准确性和完整性。
例如,可以通过存储过程检查输入的电话号码是否符合规范,或者过滤掉包含非法字符的文本。
ETL实用函数和存储过程(一)ETL实用函数和存储过程(一)ETL(Extract, Transform, Load)是一种常用的数据集成处理方式,主要用于将数据从不同的数据源提取出来,经过一系列的转换处理,最后加载到目标数据仓库或数据库中。
在ETL过程中,有一些常用的函数和存储过程,可以帮助我们更高效地进行数据处理和转换。
本文将介绍一些常用的ETL实用函数和存储过程。
1.字符串函数:字符串函数用于处理文本数据,常见的字符串函数包括:-SUBSTR:用于截取字符串的指定部分。
-CONCAT:用于将多个字符串连接为一个字符串。
-REPLACE:用于将字符串中指定的子字符串替换为另一个字符串。
-TRIM:用于去除字符串前后的空格。
-UPPER/LOWER:用于将字符串转换为大写或小写。
2.数值函数:数值函数用于处理数值型数据,常见的数值函数包括:-ROUND:用于四舍五入。
-CEIL/FLOOR:用于向上取整或向下取整。
-ABS:用于取绝对值。
-MOD:用于求余数。
-POWER/SQRT:用于计算次方和平方根。
3.日期函数:日期函数用于处理日期和时间相关的数据,常见的日期函数包括:-TO_DATE:用于将字符串转换为日期型。
-TO_CHAR:用于将日期型转换为字符串。
-MONTHS_BETWEEN:用于计算两个日期之间的月数差。
-ADD_MONTHS:用于在日期上增加指定的月份。
4.转换函数:转换函数用于将数据类型进行转换,常见的转换函数包括:-TO_NUMBER:用于将字符串转换为数值型。
-TO_CHAR:用于将数值型转换为字符串。
-TO_DATE:用于将字符串转换为日期型。
5.存储过程:存储过程是一组预定义的SQL语句集合,可以将多个SQL语句封装在一起,以实现特定的功能。
常见的存储过程功能包括:-数据清洗:对数据进行清洗、去重、去除无效值等操作。
-数据转换:对数据进行格式化、合并、拆分等操作。
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;。
pg简单存储过程PG简单存储过程存储过程是一种预定义的可重用的数据库操作,可以将一系列的SQL语句封装在一个单独的代码块中。
在PostgreSQL(简称PG)中,存储过程是由PL/pgSQL语言编写的。
本文将介绍PG简单存储过程的基本概念、语法和应用场景。
一、概述PG简单存储过程是一种在PG数据库中创建、调用和管理的存储过程。
它可以帮助开发人员提高数据库操作的效率和可维护性。
存储过程可以被认为是一种“子程序”,它接收输入参数并返回结果。
二、语法PG简单存储过程使用PL/pgSQL语言编写,具有以下基本语法结构:```CREATE OR REPLACE FUNCTION function_name (input1 data_type, input2 data_type, ..., output1 data_type, output2 data_type, ...)RETURNS return_type AS $$DECLARE-- 声明变量BEGIN-- 执行SQL语句-- ...RETURN (output1, output2, ...);END;$$ LANGUAGE plpgsql;```其中,function_name是存储过程的名称,input1、input2等是输入参数的名称和数据类型,output1、output2等是输出参数的名称和数据类型,return_type是返回结果的数据类型。
三、示例下面是一个简单的PG存储过程的示例,计算两个整数的和并返回结果:```CREATE OR REPLACE FUNCTION calculate_sum (a INTEGER, b INTEGER, OUT sum INTEGER)RETURNS INTEGER AS $$BEGINsum := a + b;RETURN sum;END;$$ LANGUAGE plpgsql;```四、调用PG简单存储过程可以通过使用CALL语句来调用,如下所示:```CALL calculate_sum(2, 3, sum);```其中,calculate_sum是存储过程的名称,2和3是输入参数的值,sum是输出参数的名称。
在Oracle存储过程中,你可以通过两种主要的方法调用另一个存储过程:1. 使用EXECUTE 或EXEC 语句:EXECUTE procedure_name(parameters);--或者EXEC procedure_name(parameters);这里,procedure_name是要调用的存储过程的名称,parameters是传递给存储过程的参数。
你需要根据实际情况提供正确的参数值。
2. 使用CALL 语句:CALL procedure_name(parameters);与EXECUTE或EXEC语句类似,CALL语句也用于调用存储过程。
以下是一个简单的例子,演示了如何在Oracle存储过程中调用另一个存储过程:--存储过程1CREATE OR REPLACE PROCEDURE Procedure1 ASBEGINDBMS_OUTPUT.PUT_LINE('Procedure 1 is executed.');END;/--存储过程2,调用存储过程1CREATE OR REPLACE PROCEDURE Procedure2 ASBEGINDBMS_OUTPUT.PUT_LINE('Procedure 2 is executing Procedure 1.');EXECUTE Procedure1;--或者使用CALL 语句-- CALL Procedure1;END;/在这个例子中,Procedure2调用了Procedure1。
在实际情况中,你可能需要传递参数给被调用的存储过程。
请注意,在存储过程中调用其他存储过程时,确保被调用的存储过程已经存在,并且你对其有执行权限。
如果需要传递参数,确保参数的数量和类型与被调用的存储过程的定义相匹配。
有关存储过程的练习素材1.使用以下语句创建数据库test Create database test 2.数据表employee,表结构如下所示:employee eid 员工编号int Not null ename 员工姓名char(10) Not null salary 工资int Not null did 部门编号int 数据表department,表结构如下:department did 部门编号int Not null dname 部门名称char(10) Not null 使用以下语句创建employee表Create table employee (eid int not null, ename char(10) not null, salary int not null, did int) 使用以下语句创建department表Create table department (did int not null, Dname char(10) not null) 具体要求针对以上数据表完成以下操作,并将对应的SQL脚本依次保存至“6.doc”文件。
1.建立存储过程p_1_1,输入员工编号、员工姓名、工资和部门编号。
2.建立存储过程p_1_2,输入部门编号和部门名称。
3.建立存储过程p_1_3,根据输入的部门编号,返回该部门员工的工资总额。
4.建立存储过程p_1_4,根据输入的部门编号,返回工资小于该部门平均工资的员工的员工编号、姓名、工资。
5.建立存储过程p_1_5,根据输入的部门编号,采用游标方式按下列格式输出该部门的所有员工的信息。
员工编号员工姓名工资------------------------------------------- 6.建立存储过程p_1_6,根据输入的部门编号,返回每个部门的部门名称和该部门第1 页共2 页的平均工资(avg_sal)第2 页共2 页。
MySQL存储过程in、out和inout参数⽰例和总结存储过程1.创建存储过程并查看全局变量mysql> create database yy;Query OK, 1 row affected (0.00 sec)mysql> use yy;Database changedmysql> set @num1=10,@num2=20,@num3=30; //设置全局变量mysql> delimiter $$mysql> create procedure p(in num1 int,out num2 int,inout num3 int)-> begin-> select num1,num2,num3;-> set num1=100,num2=200,num3=300;-> select num1,num2,num3;-> end $$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;mysql> call p(@num1,@num2,@num3);总结1:in 和 inout 参数会将全局变量的值传⼊存储过程中,⽽ out 参数不会将全局变量的值传⼊存储过程中。
在存储过程使⽤中,参数值 in、out、inout 都会发⽣改变。
2.调⽤存储过程时全局变量值的变化mysql> select @num1,@num2,@num3;总结2:当调⽤完存储过程后,发现 in 参数不会对全局变量的值引起变化,⽽ out 和 inout 参数调⽤完存储过程后,会对全局变量的值产⽣变化,会将存储过程引⽤后的值赋值给全局变量。
in参数赋值类型可以是变量还有定值,⽽out和inout参数赋值类型必须是变量。
到此这篇关于MySQL存储过程in、out和inout参数⽰例和总结的⽂章就介绍到这了,更多相关MySQL存储过程in、out和inout参数内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。