Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:

摘要:最近项目中用到了Oracle存储过程,所以就自己尝试着写了下,下面我把我遇到的问题描述一下:就是在我处理解析Clob字段中的xml字符串的时候,有个需求就是根据指定的主键参数,来判断该参数的值是否已经存在数据表里面,如果存在我就根据这个参数执行Update操作,如果不存在我就执行Save操作:

一:Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中,以及通过Oracle存储过程解析Clob字段中的xml字符串到指定的数据表里面:


二:下面是具体的方法,主要是红色部分,是解决如果根据指定的参数判断该参数的值是否已经存在的数据表中:

CREATE OR REPLACE PROCEDURE MIP.MIP_PARSE (xmlStr IN CLOB)
ISRENO     VARCHAR2 (100);AIRLINE  VARCHAR2 (100);FFID     VARCHAR2 (100);FFID_A   VARCHAR2 (100);FFID_D   VARCHAR2 (100);ABNS     VARCHAR2 (100);ACFT     VARCHAR2 (100);CHDT     VARCHAR2 (100);EIBT     VARCHAR2 (100);FATA     VARCHAR2 (100);FETA     VARCHAR2 (100);FSTA     VARCHAR2 (100);LMDT     VARCHAR2 (100);LMUR     VARCHAR2 (100);PSTM     VARCHAR2 (100);RWAY     VARCHAR2 (100);SPOT     VARCHAR2 (100);STND     VARCHAR2 (100);A_TOBT   VARCHAR2 (100);A_WEATHER     VARCHAR2 (100);ASAT     VARCHAR2 (100);BCTM     VARCHAR2 (100);BOTM     VARCHAR2 (100);BSTM     VARCHAR2 (100);C_TOBT   VARCHAR2 (100);COBT     VARCHAR2 (100);CTOT     VARCHAR2 (100);DINT     VARCHAR2 (100);DLAB     VARCHAR2 (100);DOUT     VARCHAR2 (100);EDDI     VARCHAR2 (100);EOBT     VARCHAR2 (100);EPGT     VARCHAR2 (100);EPOT     VARCHAR2 (100);FATD     VARCHAR2 (100);FSTD     VARCHAR2 (100);OFTM     VARCHAR2 (100);STDI     VARCHAR2 (100);TSAT     VARCHAR2 (100);--新增字段FLIGHTNUMBER VARCHAR2 (100);FLIGHTMARK   VARCHAR2 (100);--定义出港信息表要格式的时间字段A_TOBT_D VARCHAR2 (100);ASAT_D   VARCHAR2 (100);BCTM_D   VARCHAR2 (100);BOTM_D   VARCHAR2 (100);BSTM_D   VARCHAR2 (100);C_TOBT_D VARCHAR2 (100);COBT_D   VARCHAR2 (100);CTOT_D   VARCHAR2 (100);DINT_D   VARCHAR2 (100);DOUT_D   VARCHAR2 (100);EDDI_D   VARCHAR2 (100);EOBT_D   VARCHAR2 (100);EPGT_D   VARCHAR2 (100);EPOT_D   VARCHAR2 (100);FATD_D   VARCHAR2 (100);FSTD_D   VARCHAR2 (100);LMDT_D   VARCHAR2 (100);OFTM_D   VARCHAR2 (100);STDI_D   VARCHAR2 (100);TSAT_D   VARCHAR2 (100);--定义进港信息表要格式化的时间字段EIBT_A   VARCHAR2 (100);FATA_A   VARCHAR2 (100);FETA_A   VARCHAR2 (100);FSTA_A   VARCHAR2 (100);LMDT_A   VARCHAR2 (100);PSTM_A   VARCHAR2 (100);SPOT_A   VARCHAR2 (100);COUNTS   NUMBER(36);--出港信息要修改的除时间外的字段STND_D   VARCHAR2 (100);A_WEATHER_D VARCHAR2 (100);ABNS_D   VARCHAR2 (100);ACFT_D   VARCHAR2 (100);AIRLINE_D VARCHAR2 (100);DLAB_D   VARCHAR2 (100);LMUR_D   VARCHAR2 (100);RENO_D   VARCHAR2 (100);RWAY_D   VARCHAR2 (100);-- 进港信息要修改的除时间外的字段ABNS_A   VARCHAR2 (100);ACFT_A   VARCHAR2 (100);AIRLINE_A VARCHAR2 (100);CHDT_A   VARCHAR2 (100);RENO_A   VARCHAR2 (100);LMUR_A   VARCHAR2 (100);RWAY_A   VARCHAR2 (100);STND_A   VARCHAR2 (100);BEGINRENO := GetXmlNodeValue (xmlStr, 'RENO');AIRLINE := GetXmlNodeValue (xmlStr, 'AIRLINE');FFID := GetXmlNodeValue (xmlStr, 'FFID');ABNS := GetXmlNodeValue (xmlStr, 'ABNS');ACFT := GetXmlNodeValue (xmlStr, 'ACFT');CHDT := GetXmlNodeValue (xmlStr, 'CHDT');EIBT := GetXmlNodeValue (xmlStr, 'EIBT');FATA := GetXmlNodeValue (xmlStr, 'FATA');FETA := GetXmlNodeValue (xmlStr, 'FETA');FFID := GetXmlNodeValue (xmlStr, 'FFID');FSTA := GetXmlNodeValue (xmlStr, 'FSTA');LMDT := GetXmlNodeValue (xmlStr, 'LMDT');LMUR := GetXmlNodeValue (xmlStr, 'LMUR');PSTM := GetXmlNodeValue (xmlStr, 'PSTM');RWAY := GetXmlNodeValue (xmlStr, 'RWAY');SPOT := GetXmlNodeValue (xmlStr, 'SPOT');STND := GetXmlNodeValue (xmlStr, 'STND');A_TOBT := GetXmlNodeValue (xmlStr, 'A_TOBT');A_WEATHER := GetXmlNodeValue (xmlStr, 'A_WEATHER');ASAT := GetXmlNodeValue (xmlStr, 'ASAT');BCTM := GetXmlNodeValue (xmlStr, 'BCTM');BOTM := GetXmlNodeValue (xmlStr, 'BOTM');BSTM := GetXmlNodeValue (xmlStr, 'BSTM');C_TOBT := GetXmlNodeValue (xmlStr, 'C_TOBT');COBT := GetXmlNodeValue (xmlStr, 'COBT');CTOT := GetXmlNodeValue (xmlStr, 'CTOT');DINT := GetXmlNodeValue (xmlStr, 'DINT');DLAB := GetXmlNodeValue (xmlStr, 'DLAB');DOUT := GetXmlNodeValue (xmlStr, 'DOUT');EDDI := GetXmlNodeValue (xmlStr, 'EDDI');EOBT := GetXmlNodeValue (xmlStr, 'EOBT');EPGT := GetXmlNodeValue (xmlStr, 'EPGT');EPOT := GetXmlNodeValue (xmlStr, 'EPOT');FATD := GetXmlNodeValue (xmlStr, 'FATD');FSTD := GetXmlNodeValue (xmlStr, 'FSTD');OFTM := GetXmlNodeValue (xmlStr, 'OFTM');STDI := GetXmlNodeValue (xmlStr, 'STDI');TSAT := GetXmlNodeValue (xmlStr, 'TSAT');--出港信息表中时间字段的时间格式函数的用法A_TOBT_D := FORMATDATEVALUE (A_TOBT, 'A_TOBT_D');ASAT_D := FORMATDATEVALUE (ASAT, 'ASAT_D');BCTM_D := FORMATDATEVALUE (BCTM, 'BCTM_D');BOTM_D := FORMATDATEVALUE (BOTM, 'BOTM_D');BSTM_D := FORMATDATEVALUE (BSTM, 'BSTM_D');C_TOBT_D := FORMATDATEVALUE (C_TOBT, 'C_TOBT_D');COBT_D := FORMATDATEVALUE (COBT, 'COBT_D');CTOT_D := FORMATDATEVALUE (CTOT, 'CTOT_D');DINT_D := FORMATDATEVALUE (DINT, 'DINT_D');DOUT_D := FORMATDATEVALUE (DOUT, 'DOUT_D');EDDI_D := FORMATDATEVALUE (EDDI, 'EDDI_D');EOBT_D := FORMATDATEVALUE (EOBT, 'EOBT_D');EPGT_D := FORMATDATEVALUE (EPGT, 'EPGT_D');EPOT_D := FORMATDATEVALUE (EPOT, 'EPOT_D');FATD_D := FORMATDATEVALUE (FATD, 'FATD_D');FSTD_D := FORMATDATEVALUE (FSTD, 'FSTD_D');LMDT_D := FORMATDATEVALUE (LMDT, 'LMDT_D');OFTM_D := FORMATDATEVALUE (OFTM, 'OFTM_D');STDI_D := FORMATDATEVALUE (STDI, 'STDI_D');TSAT_D := FORMATDATEVALUE (TSAT, 'TSAT_D');--进港信息表中时间字段的时间格式函数的用法EIBT_A := FORMATDATEVALUE (EIBT, 'EIBT_A');FATA_A := FORMATDATEVALUE (FATA, 'FATA_A');FETA_A := FORMATDATEVALUE (FETA, 'FETA_A');FSTA_A := FORMATDATEVALUE (FSTA, 'FSTA_A');LMDT_A := FORMATDATEVALUE (LMDT, 'LMDT_A');PSTM_A := FORMATDATEVALUE (PSTM, 'PSTM_A');SPOT_A := FORMATDATEVALUE (SPOT, 'SPOT_A');--出港信息要修改的除时间外的字段STND_D := GetXmlNodeValue (xmlStr, 'STND');A_WEATHER_D := GetXmlNodeValue (xmlStr, 'A_WEATHER');ABNS_D := GetXmlNodeValue (xmlStr, 'ABNS');ACFT_D := GetXmlNodeValue (xmlStr, 'ACFT');AIRLINE_D := GetXmlNodeValue (xmlStr, 'AIRLINE');DLAB_D := GetXmlNodeValue (xmlStr, 'DLAB');LMUR_D := GetXmlNodeValue (xmlStr, 'LMUR');RENO_D := GetXmlNodeValue (xmlStr, 'RENO');RWAY_D := GetXmlNodeValue (xmlStr, 'RWAY');--进港信息要修改的除时间外的字段ABNS_A := GetXmlNodeValue (xmlStr, 'ABNS');ACFT_A := GetXmlNodeValue (xmlStr, 'ACFT');AIRLINE_A := GetXmlNodeValue (xmlStr, 'AIRLINE');CHDT_A := GetXmlNodeValue (xmlStr, 'CHDT');RENO_A := GetXmlNodeValue (xmlStr, 'RENO');LMUR_A := GetXmlNodeValue (xmlStr, 'LMUR');RWAY_A := GetXmlNodeValue (xmlStr, 'RWAY');STND_A := GetXmlNodeValue (xmlStr, 'STND');IF INSTR(FFID,'-D-') > 0 THENFFID_D := FFID;--截取航班号FLIGHTNUMBER := SUBSTR(FFID_D,INSTR(FFID_D,'-',1)+1,INSTR(FFID_D,'-',INSTR(FFID_D,'-',1)+1)-INSTR(FFID_D,'-',1)-1);--截取出港标志FLIGHTMARK := SUBSTR(FFID_D,INSTR(FFID_D,'-',2,2)+1,INSTR(FFID_D,'-',2,3)-1-INSTR(FFID_D,'-',2,2));--UPDATE之前要先根据FFID查询一下看看数据表中是否已经存在该条数据,如果存在就UPDATE,如果不存在就SAVE<span style="color:#cc0000;">SELECT COUNT(1) INTO COUNTS FROM TB_CMS_FLGTINFO_D where FFID = FFID_D;IF COUNTS > 0 THEN </span>UPDATE TB_CMS_FLGTINFO_DSET A_TOBT = A_TOBT_D,A_WEATHER = A_WEATHER_D,ABNS = ABNS_D,ACFT = ACFT_D,AIRLINE = AIRLINE_D,ASAT = ASAT_D,BCTM = BCTM_D,BOTM = BOTM_D,BSTM = BSTM_D,C_TOBT = C_TOBT_D,COBT = COBT_D,CTOT = CTOT_D,DINT = DINT_D,DLAB = DLAB_D,DOUT = DOUT_D,EDDI = EDDI_D,EOBT = EOBT_D,EPGT = EPGT_D,EPOT = EPOT_D,FATD = FATD_D,FSTD = FSTD_D,LMDT = LMDT_D,LMUR = LMUR_D,OFTM = OFTM_D,RENO = RENO_D,RWAY = RWAY_D,STDI = STDI_D,STND = STND_D,TSAT = TSAT_DWHERE FFID = FFID_D;ELSEINSERT INTO TB_CMS_FLGTINFO_D (ID,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BSTM,C_TOBT,COBT,CTOT,DINT,DLAB,DOUT,EDDI,EOBT,EPGT,EPOT,FATD,FFID,FLIGHTNUMBER,FLIGHTMARK,FSTD,LMDT,LMUR,OFTM,RENO,RWAY,STDI,STND,TSAT)VALUES   (FLGTINFO_D_SEQ.NEXTVAL,A_TOBT_D,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT_D,BCTM_D,BOTM_D,BSTM_D,C_TOBT_D,COBT_D,CTOT_D,DINT_D,DLAB,DOUT_D,EDDI_D,EOBT_D,EPGT_D,EPOT_D,FATD_D,FFID_D,FLIGHTNUMBER,FLIGHTMARK,FSTD_D,LMDT_D,LMUR,OFTM_D,RENO,RWAY,STDI_D,STND,TSAT_D);END IF;ELSEFFID_A := FFID;--截取航班号FLIGHTNUMBER := SUBSTR(FFID_A,INSTR(FFID_A,'-',1)+1,INSTR(FFID_A,'-',INSTR(FFID_A,'-',1)+1)-INSTR(FFID_A,'-',1)-1);--截取出港标志FLIGHTMARK := SUBSTR(FFID_A,INSTR(FFID_A,'-',2,2)+1,INSTR(FFID_A,'-',2,3)-1-INSTR(FFID_A,'-',2,2));--UPDATE之前要先根据FFID查询一下看看数据表中是否已经存在该条数据,如果存在就UPDATE,如果不存在就SAVE<span style="color:#cc0000;">SELECT COUNT(1) INTO COUNTS FROM TB_CMS_FLGTINFO_A where FFID = FFID_A;IF COUNTS > 0 THEN</span>UPDATE TB_CMS_FLGTINFO_ASET ABNS = ABNS_A,ACFT = ACFT_A,AIRLINE = AIRLINE_A,CHDT = CHDT_A,RENO = RENO_A,EIBT = EIBT_A,FATA = FATA_A,FETA = FETA_A,FSTA = FSTA_A,LMDT = LMDT_A,LMUR = LMUR_A,PSTM = PSTM_A,RWAY = RWAY_A,SPOT = SPOT_A,STND = STND_AWHERE FFID = FFID_A;ELSEINSERT INTO TB_CMS_FLGTINFO_A (ID,ABNS,ACFT,AIRLINE,CHDT,FFID,FLIGHTNUMBER,FLIGHTMARK,RENO,EIBT,FATA,FETA,FSTA,LMDT,LMUR,PSTM,RWAY,SPOT,STND)VALUES   (FLGTINFO_A_SEQ.NEXTVAL,ABNS,ACFT,AIRLINE,CHDT,FFID_A,FLIGHTNUMBER,FLIGHTMARK,RENO,EIBT_A,FATA_A,FETA_A,FSTA_A,LMDT_A,LMUR,PSTM_A,RWAY,SPOT_A,STND);END IF;END IF;COMMIT;EXCEPTIONWHEN OTHERSTHENDBMS_OUTPUT.PUT_LINE (SQLERRM);END MIP_PARSE;
/

三:详情请看: http://www.zuidaima.com/question/2041312860310528.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命运2服务器维护时间2019,《命运2》今晚将停机维护 为多平台共用存档做准备...

原标题&#xff1a;《命运2》今晚将停机维护 为多平台共用存档做准备《命运2(Destiny 2)》将于今晚(6月27日)10点&#xff0c;开始12个小时的停机维护&#xff0c;这次维护是为支持跨平台共享存档做准备。如果你是今天晚上想玩会《命运&#xff12;》的玩家最好来看看&#xff…

e4a服务器文件,e4a链接网站服务器

e4a链接网站服务器 内容精选换一换当您想在Internet上通过域名访问您的网站时&#xff0c;可以通过华为云的云解析服务为域名添加解析记录。例如&#xff0c;搭建一个网站服务器&#xff0c;采用IPv4格式的弹性IP地址。如果想要实现通过域名“example.com”及其子域名“www.exa…

本地网页服务器 跨域,nodejs搭建本地服务器轻松解决跨域问题

一、使用 Node 创建 Web 服务器注&#xff1a;Node.js 提供了 http 模块&#xff0c;http 模块主要用于搭建 HTTP 服务端和客户端&#xff0c;下面就是简单的服务器实现过程&#xff1a;1、编写服务器代码server.js404错误你要找的页面不存在);res.end();}else{//HTTP 状态码 2…

闲置服务器装win10系统,求高手帮看一下我这台闲置的老主机还能装win10或者win8.1吗?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼--------[ 概览 ]----------------------------------------------------------------------------------电脑型号 P4V8X-MX 台式电脑操作系统 Windows 7 旗舰版 32位 SP1 ( DirectX 11 )处理器 英特尔 Celeron(赛扬) 2.93GHz主板 …

Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...

摘要&#xff1a;之前在项目中解决了插入字符串类型的数据&#xff0c;今天试着写了一个插入date类型的字段&#xff0c;成功了&#xff0c;现在记录一下&#xff0c;以便以后查看&#xff1a; 一&#xff1a;首先建立一个根据xml节点名称获取对应的xml值的Function.sql: CREA…

Oracle中通过Job实现定时同步两个数据表之间的数据

摘要&#xff1a;之前项目中用的触发器来实现数据解析&#xff0c;但是最近客户反应&#xff0c;会报错&#xff0c;所以我们从新设计了一下&#xff0c;通过Oracle里面的Job来解决这一问题&#xff0c;这样就不会对原来的数据表做操作&#xff0c;只对临时表操作&#xff0c;就…

学习笔记1-Linux1

Linux系统介绍 Linux管理硬盘的能力很强&#xff0c;我们一般只看到一个分区 / 根目录 /bin 存储系统命令 /dev 设备文件 /media 多媒体文件&#xff0c;U盘&#xff0c;光盘&#xff0c;共享文件夹 /proc 记录程序运行时的资源使用情况 /sbin 存储超级管理员使用的系统…

学习笔记2-Linux2

Ubuntu系统快捷键 ctrlaltt&#xff1a;打开终端 ctrll&#xff1a; 清屏 ctrlalt方向键&#xff1a;快速切换工作区域 tab&#xff1a;自动补全 up/down&#xff1a;调出指令执行记录 alttab&#xff1a;切换任务重定向、管道、通配符 重定向重定向就是把命令的执行结果…

学习笔记3-C语言-基础

C语言简介 发展史&#xff1a;BCPL -> new B -> C -> Minix -> Linux -> gcc C语言诞生&#xff1a; 1970年~1973年&#xff0c;在肯.汤姆逊和丹尼斯.里奇(影响大)主导下编写完成&#xff0c;归属美国贝尔实验室 C语言的诞生专门用于编写操作系统&#xf…

学习笔记4-C语言-开关、循环、跳转

一、开关语句 switch(n) //n可以是数值、表达式&#xff0c;运算结果必须是整型 {case val: //必须是常量&#xff0c;如果val等于n&#xff0c;则打开开关...;break; //关闭执行开关&#xff0c;switch中不能与continue配合使用//如果所有的case后面都有…

JQuery,ajax异步加载selectoption/option/select多选框:

摘要&#xff1a;最近项目中用到了jquery&#xff0c;ajax&#xff0c;由于很长时间没用了&#xff0c;所以这次做花了很多时间&#xff0c;现在记录一下&#xff0c;方便以后回忆&#xff1a; 一&#xff1a;js文件&#xff1a; <script type"text/javascript"&…

学习笔记5-C语言-数组

数组&#xff1a; 什么是数组&#xff1a; 相同类型变量的组合,是一种批量定义变量的方式 定义&#xff1a; 类型 数组名[数组变量数量]&#xff1b;int arr[5]; 使用&#xff1a;数组名[下标]&#xff1b;arr[0];数组下标从零开始&#xff0c;范围&#xff1a;0~数量-1 遍历…

学习笔记6-小项目-走迷宫、推箱子

获取方向键的功能&#xff1a;使用getch.h头文件中的getch函数 1、把windows中的getch.h头文件放到共享文件夹中 2、终端输入 cd /media/sf_GONGXIANG进入共享文件夹 3、sudo cp getch.h /usr/include 4、cd /usr/include/ 5、sudo chmod r getch.h头文件中的getch函数 time.h…

学习笔记7-C语言-进制转换、原返补、位运算、函数

进制转换 为什么要使用二、八进制、十六进制&#xff1f;因为现在的CPU只能识别高低两种电流&#xff0c;因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别&#xff0c;但不方便人们书写、记录&#xff0c;所以把二进制数据转换成八进制是为了方便记录在文件中。…

学习笔记8-作业

作业1&#xff1a;实现一个函数&#xff0c;判断一个整数是否是素数&#xff0c;调用该函数来显示出100~10000之间的所有素数 #include<stdio.h> #include<stdbool.h> #include<math.h> bool is_sushu(int num) {for(int i2;i<sqrt(num);i){if(num%i0)re…

学习笔记9-C语言-传参、类型限定符、递归

函数传参&#xff1a; 1、形参变量属于它所在的函数&#xff0c;出了该函数就不能使用 2、实参与形参之间都是以赋值的形式进行数据传递&#xff08;值传递&#xff09; 3、return 其实是把返回值数据放置到一个公共的区域&#xff08;函数和函数调用者&#xff09;&#xff0…

Oracle创建视图实现获取当前数据所在的页数,这里以每页2条数据分页

摘要&#xff1a;Oracle创建视图实现获取当前数据所在的页数&#xff0c;这里以每页2条数据分页&#xff0c;详细请看&#xff1a; 一&#xff1a; DROP VIEW MIP.TB_CMS_FLGTINFO_D_VIEW;/* Formatted on 2014/12/4 8:35:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE FOR…

学习笔记10-C语言-小项目-五子棋

小项目&#xff1a; 需要的数据 1、定义棋盘的二维数组 2、定义变量用于记录下棋的坐标 3、定义角色 黑棋 O 白棋 * 空位业务逻辑&#xff1a; 是否需要对数据初始化 for(;;) {1、清屏、显示棋盘2、落子坐标是否合法、该位置是否有棋子3、判断是否五子连珠4、交换角色5、显示…

学习笔记11-C语言-指针

什么是指针&#xff1a; 指针是一种特护的数据类型&#xff0c;使用它可以定义指针变量&#xff0c;指针变量存储的是整型数据&#xff0c;代表内存的编号&#xff0c;通过这个编号可以访问到对应内存。为什么使用指针 1、函数与函数之间是相互独立的&#xff0c;但是有些时候…

学习笔记12-C语言-堆内存、字符串

什么是堆内存&#xff1a; 是进程中的一个内存段&#xff08;text\data\bss\heap\stack&#xff09;&#xff0c;由程序猿手动控制。 特点是足够大&#xff0c;缺点是使用麻烦为什么要使用堆内存&#xff1a; 1、随着程序的复杂&#xff0c;数据会越来越多。 2、其他的内存段…