plsql过程语言之uxdb与oracle语法差异
序号 | 场景 | uxdb | oracle |
1 | 在存储过程中使用goto子句 | create or replace procedure uxdbc_oracle_extension_plsql_goto_0001_procedure01(t1 int) language plsql as $$ begin if t1%2=0 then goto even_number; else goto odd_number; end if; <<even_number>> raise info 'this is a even number'; goto end_lb; <<odd_number>> raise info 'this is a odd number'; <<end_lb>> null; end; $$; call uxdbc_oracle_extension_plsql_goto_0001_procedure01(10); | create or replace procedure uxdbc_oracle_extension_plsql_goto_0001_procedure01(t1 in int) is begin if t1 mod 2 = 0 then goto even_number; else goto odd_number; end if; <<even_number>> dbms_output.put_line('this is a even number'); goto end_lb; <<odd_number>> dbms_output.put_line('this is a odd number'); <<end_lb>> null; end; / call uxdbc_oracle_extension_plsql_goto_0001_procedure01(10); |


序号 | 场景 | uxdb | oracle |
2 | 在函数中使用goto子句 | create or replace function uxdbc_oracle_extension_plsql_goto_0002_function01(t1 int) returns text language plsql returns null on null input as $$ declare p varchar(30); begin if t1%2=0 then goto even_number; else goto odd_number; end if; <<even_number>> p := cast($1 as text) || ' is a even number'; goto end_lb; <<odd_number>> p := cast($1 as text) || ' is a odd number'; <<end_lb>> return p; end; $$; select uxdbc_oracle_extension_plsql_goto_0002_function01(10); | create or replace function uxdbc_oracle_extension_plsql_goto_0002_function01(t1 in int) return varchar is p varchar(30); begin if t1 mod 2 =0 then goto even_number; else goto odd_number; end if; <<even_number>> p := t1 || ' is a even number'; goto end_lb; <<odd_number>> p := t1 || ' is a odd number'; <<end_lb>> return p; end; / select uxdbc_oracle_extension_plsql_goto_0002_function01(10) from dual; |

序号 | 场景 | uxdb | oracle |
3 | 在匿名块中使用goto子句 | declare t1 int:=7; begin if t1%2=0 then goto even_number; else goto odd_number; end if; <<even_number>> raise info 'this is a even number'; goto end_lb; <<odd_number>> raise info 'this is a odd number'; <<end_lb>> null; end; / do language plsql $$ declare t1 int:=10; begin if t1%2=0 then goto even_number; else goto odd_number; end if; <<even_number>> raise info 'this is a even number'; goto end_lb; <<odd_number>> raise info 'this is a odd number'; <<end_lb>> null; end; $$; | declare t1 int:=10; begin if t1 mod 2 =0 then goto even_number; else goto odd_number; end if; <<even_number>> dbms_output.put_line('this is a even number'); goto end_lb; <<odd_number>> dbms_output.put_line('this is a odd number'); <<end_lb>> null; end; / |


序号 | 场景 | uxdb | oracle |
4 | 标签可以出现在子块前 | declare p text; n int := 39; begin for j in 2..round(sqrt(n)) loop if n % j = 0 then p := 'is not a prime number'; goto check_odd; end if; end loop; p := ' is a prime number'; <<check_odd>> --here begin raise info '% %',n,p; if n%2=0 then p := 'is a even number'; else p := 'is a odd number'; raise info '% %',n,p; end if; end; end; / | declare p varchar(30); n int := 39; begin for j in 2..round(sqrt(n)) loop if n mod j = 0 then p := 'is not a prime number'; goto check_odd; end if; end loop; p := ' is a prime number'; <<check_odd>> --here begin dbms_output.put_line(n||p); if n mod 2=0 then p := 'is a even number'; else p := 'is a odd number'; dbms_output.put_line(n||p); end if; end; end; / |

序号 | 场景 | uxdb | oracle |
5 | 标签可以出现在if语句之前 | declare p text; n int := 39; begin for j in 2..round(sqrt(n)) loop if n % j = 0 then p := 'is not a prime number'; goto check_odd; end if; end loop; p := ' is a prime number'; raise info '% %',n,p; <<check_odd>> --here if n%2=0 then p := 'is a even number'; else p := 'is a odd number'; end if; raise info '% %',n,p; end; / | declare p varchar(30); n int := 39; begin for j in 2..round(sqrt(n)) loop if n mod j = 0 then p := 'is not a prime number'; goto check_odd; end if; end loop; p := ' is a prime number'; dbms_output.put_line(n||p); <<check_odd>> --here if n mod 2=0 then p := 'is a even number'; else p := 'is a odd number'; end if; dbms_output.put_line(n||p); end; / |


序号 | 场景 | uxdb | oracle |
6 | goto语句可以从一个子if语句跳到父if语句中 | declare i int :=7; begin if i != 0 then if i > 0 then raise info 'is zhengshu.'; goto lb; else raise info 'is fushu.'; end if; <<lb>> raise info 'outer'; else raise info 'is 0.'; end if; end; / | declare i int :=7; begin if i != 0 then if i > 0 then dbms_output.put_line('is zhengshu.'); goto lb; else dbms_output.put_line('is fushu.'); end if; <<lb>> dbms_output.put_line('outer'); else dbms_output.put_line('is 0.'); end if; end; / |


序号 | 场景 | uxdb | oracle |
7 | goto语句可以将控制转移出if判断语句 | create table uxdbc_oracle_extension_plsql_goto_0031_table01(id int, name varchar(10),job varchar(10),hiredate date); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (120, 'Weiss','shouyin','2020-09-01'); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (121, null,'daogou','2021-05-05'); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (122, 'Weiss2',null,'2019-01-10'); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (123, 'Weiss3','qingjie',null); create or replace procedure uxdbc_oracle_extension_plsql_goto_0031_procedure01 (v_id int) language plsql as $$ declare v_name varchar(10); v_job varchar(10); v_hiredate varchar(10); begin select name, job, hiredate into v_name, v_job, v_hiredate from uxdbc_oracle_extension_plsql_goto_0031_table01 where id = v_id; if v_name is null then goto invalid_emp; end if; if v_job is null then goto invalid_emp; end if; if v_hiredate is null then goto invalid_emp; end if; raise info 'this is a validated without errors.'; <<invalid_emp>> raise info 'this is not a valid employee.'; end; $$; call uxdbc_oracle_extension_plsql_goto_0031_procedure01(120); call uxdbc_oracle_extension_plsql_goto_0031_procedure01(121); | create table uxdbc_oracle_extension_plsql_goto_0031 _table01(id int, name varchar(10),job varchar(10),hiredate date); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (120, 'Weiss','shouyin',to_date('2020-09-01','YYYY-MM-DD')); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (121, null,'daogou',to_date('2021-05-05','YYYY-MM-DD')); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (122, 'Weiss2',null,to_date('2019-01-10','YYYY-MM-DD')); insert into uxdbc_oracle_extension_plsql_goto_0031_table01 values (123, 'Weiss3','qingjie',null); create or replace procedure uxdbc_oracle_extension_plsql_goto_0031_procedure01 (v_id int) is v_name varchar(10); v_job varchar(10); v_hiredate varchar(10); begin select name, job, hiredate into v_name, v_job, v_hiredate from uxdbc_oracle_extension_plsql_goto_0031_table01 where id = v_id; if v_name is null then goto invalid_emp; end if; if v_job is null then goto invalid_emp; end if; if v_hiredate is null then goto invalid_emp; end if; dbms_output.put_line('this is a validated without errors.'); <<invalid_emp>> dbms_output.put_line('this is not a valid employee.'); end; / call uxdbc_oracle_extension_plsql_goto_0031_procedure01(120); call uxdbc_oracle_extension_plsql_goto_0031_procedure01(121); |


序号 | 场景 | uxdb | oracle |
8 | case语句 | declare season int; temperature int; begin season:=20; temperature:=38; case season when 10 then raise info 'spring'; when 20 then raise info 'summer'; goto temp_start; when 30 then raise info 'autumn'; when 40 then raise info 'winter'; else raise info 'is invalid season'; end case; <<temp_start>> case when temperature>30 then raise info 'so hot'; when temperature>15 then raise info 'so comfortable'; else raise info 'so cold'; end case; end; / | declare season int; temperature int; begin season:=20; temperature:=38; case season when 10 then dbms_output.put_line('spring'); when 20 then dbms_output.put_line('summer'); goto temp_start; when 30 then dbms_output.put_line('autumn'); when 40 then dbms_output.put_line('winter'); else dbms_output.put_line('is invalid season'); end case; <<temp_start>> case when temperature>30 then dbms_output.put_line('so hot'); when temperature>15 then dbms_output.put_line('so comfortable'); else dbms_output.put_line('so cold'); end case; end; / |


序号 | 场景 | uxdb | oracle |
9 | goto语句可以从exception中跳转到父块中 | declare i int :=0; begin <<LB1>> i := i + 1; raise info '%',i; begin <<LB2>> if i =1 then raise exception numeric_value_out_of_range; else raise exception division_by_zero; end if; exception when numeric_value_out_of_range then goto LB1; when division_by_zero then raise info 'division_by_zero'; when others then raise info 'error'; end; end; / | declare i int :=0; numeric_value_out_of_range exception; division_by_zero exception; begin <<LB1>> i := i + 1; dbms_output.put_line(i); begin <<LB2>> if i =1 then raise numeric_value_out_of_range; else raise division_by_zero; end if; exception when numeric_value_out_of_range then goto LB1; when division_by_zero then dbms_output.put_line('division_by_zero'); when others then dbms_output.put_line('error'); end; end; / |


序号 | 场景 | uxdb | oracle |
10 | goto语句在内外循环之间跳转,最后跳出嵌套循环 | declare s int := 0; i int := 0; j int; begin <<outer_loop>> loop i := i + 1; j := 0; <<inner_loop>> loop j := j + 1; s := s + i * j; if j<=5 then goto inner_loop; elsif (i * j) <= 15 then goto outer_loop; else goto end_loop; end if; end loop inner_loop; end loop outer_loop; <<end_loop>> raise info 'end_loop'; raise info 'The sum of products equals:% ',s; end; / | declare s int := 0; i int := 0; j int; begin <<outer_loop>> loop i := i + 1; j := 0; <<inner_loop>> loop j := j + 1; s := s + i * j; if j<=5 then goto inner_loop; elsif (i * j) <= 15 then goto outer_loop; else goto end_loop; end if; end loop inner_loop; end loop outer_loop; <<end_loop>> dbms_output.put_line('end_loop'); dbms_output.put_line('The sum of products equals: '||s); end; / |


序号 | 场景 | uxdb | oracle |
11 | 如果goto语句过早地退出游标for loop语句,游标将关闭 | create table uxdbc_oracle_extension_plsql_goto_0047_table01(id int, name varchar(10),job varchar(10)); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (120, 'Weiss','shouyin'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (121, 'Weiss1','daogou'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (122, 'Weiss2','kuaiji'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (123, 'Weiss3','qingjie'); declare p varchar(10); c cursor for select id,name,job from uxdbc_oracle_extension_plsql_goto_0047_table01; begin for v in c loop raise info '%---%---%', v.id,v.name,v.job; if v.id=120 then goto end_loop; end if; end loop; <<end_loop>> raise info 'end_loop,cursor close'; end; / | create table uxdbc_oracle_extension_plsql_goto_0047_table01(id int, name varchar(10),job varchar(10)); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (120, 'Weiss','shouyin'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (121, 'Weiss1','daogou'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (122, 'Weiss2','kuaiji'); insert into uxdbc_oracle_extension_plsql_goto_0047_table01 values (123, 'Weiss3','qingjie'); declare p varchar(10); v_id int; v_name varchar(10); v_job varchar(10); cursor c is select id,name,job from uxdbc_oracle_extension_plsql_goto_0047_table01; begin open c; fetch c into v_id,v_name,v_job; dbms_output.put_line(v_id||'---'||v_name||'---'||v_job); if v_id=120 then goto end_loop; end if; <<end_loop>> close c; dbms_output.put_line('end_loop,cursor close'); end; / |


序号 | 场景 | uxdb | oracle |
12 | 函数递归调用 | create or replace function uxdbc_oracle_extension_plsql_goto_0053_function01(x number) returns number language plsql as $$ declare f number; begin if x=0 then f := 1; else goto lb_digui; end if; <<lb_digui>> f := x * uxdbc_oracle_extension_plsql_goto_0053_function01(x-1); return f; end; $$; select uxdbc_oracle_extension_plsql_goto_0053_function01(5); | create or replace function uxdbc_oracle_extension_plsql_goto_0053_function01(x number) return number is f number; begin if x=0 then f := 1; else goto lb_digui; end if; <<lb_digui>> f := x * uxdbc_oracle_extension_plsql_goto_0053_function01(x-1); return f; end; / select uxdbc_oracle_extension_plsql_goto_0053_function01(5) from dual; |
相关文章:
plsql过程语言之uxdb与oracle语法差异
序号场景uxdboracle1在存储过程中使用goto子句create or replace procedure uxdbc_oracle_extension_plsql_goto_0001_procedure01(t1 int) language plsql as $$ begin if t1%20 then goto even_number; else goto odd_number; end if; <<even_number>> raise…...
file_get_contents 打开本地文件报错: failed to open stream: No such file or directory
php 使用file_get_contents时报错 failed to open stream: No such file or directory (打开流失败,没有这样的文件或目录) 1. 首先确保文件路径没问题 最好是直接复制一下文件的路径 2. windows电脑可以右键该文件 → 属性→安全 →对象名称 选中后复制一下 3. 然后…...
Candence allegro 创建等长的方法
随着源同步时序电路的发展,越来越多的并行总线开始采用这种时序控制电路,最典型的代表当属目前炙手可热的DDRx系列。下图这种点到点结构的同步信号,对于攻城狮来说,设置等长约束就非常easy了图片。 But,对于有4、6、8、、、等多颗DDR芯片的ACC同步信号来说,要设置等长约束…...
使用Python批量修改文件名称
下载了一些图片,想要更改其文件的名称。 试了许多方法,都不太理想。 于是想到了使用Python来实现。 需要用到的模块及函数: import osrename() 函数用于改变文件或文件夹的名称。它接受两个参数:原文件名和新文件名。 os.rena…...
【跟我一起读《视觉惯性SLAM理论与源码解析》】第八章 ORB-SLAM2中的特征匹配
特征匹配在ORB-SLAM2中是很重要的内容,函数有多次重载,一般而言分为以下 单目初始化下的特征匹配通过词袋进行特征匹配通过地图点投影进行特征匹配通过Sim(3)变化进行特征匹配 在单目初始化下的特征匹配是参考帧和当前帧之间的特…...
【Leedcode】数据结构中链表必备的面试题(第四期)
【Leedcode】数据结构中链表必备的面试题(第四期) 文章目录【Leedcode】数据结构中链表必备的面试题(第四期)1.题目2.思路图解(1)思路一(2)思路二3.源代码总结1.题目 相交链表: 如下(示例)&…...
【2023】助力Android金三银四面试
前言 新气象,新生机。在2023年的Android开发行业中,又有那些新的面试题出现呢?对于Android面试官的拷问,我们又如何正确去解答?万变不离其宗,其实只要Android的技术层面没变化,面试题也就是差不…...
Leetcode.1801 积压订单中的订单总数
题目链接 Leetcode.1801 积压订单中的订单总数 Rating : 1711 题目描述 给你一个二维整数数组 orders,其中每个 orders[i] [pricei, amounti, orderTypei]表示有 amounti笔类型为 orderTypei、价格为 pricei的订单。 订单类型 orderTypei 可以分为两种…...
红帽Linux技术-cp命令
cp是一个复制文件或者目录的命令,其作用是将一个或多个文件或目录从源位置复制到目标位置。 格式:cp [选项] 源文件或目录 目标文件或目录 常用选项: -r:复制目录及其子目录下的所有文件和目录; -p:保留…...
代码随想录算法训练营day41 | 动态规划 01背包问题基础 01背包问题之滚动数组
01背包问题基础 问题描述 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 举个栗子 背包最大重量为4。 物品为: 重量价值…...
MyBatis学习笔记(三) —— MyBatis核心配置文件详解
3、核心配置文件详解 id是唯一标识,不能重复,但是在真正开发过程中,不可能一个项目中同时使用两个环境,肯定会使用其中的某一个,这时候它的default就比较重要了。 default是设置我们当前使用的默认环境的id <?x…...
使用GDAL进行坐标转换
1、地理坐标系与投影坐标系空间参考中主要包含大地水准面、地球椭球体、投影坐标系等几部分内容。地图投影就是把地球表面的任意点,利用一定数学法则,转换到地图平面上的理论和方法,一般有两种坐标系来进行表示,分别是地理坐标系和…...
日常编程中和日期相关的代码和bug
本文主要是Java中和日期时间相隔的几个常用代码函数代码,做了总结,希望在日常编码中,可以帮到大家。 1.计算闰年 记住一个短语,“四年一润,百年不闰,四百再润”,不管换啥语言,相信…...
ATT与Intel汇编语法区别
寄存器、变量(常量)与立即数 在Intel汇编中,无论是寄存器、变量(常量)还是立即数,都是直接使用的,例如下列例子中分别加载一个变量(常量)与立即数到寄存器中:…...
Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍
前言 本文为 Spring Cloud Alibaba介绍 相关知识,下边将对微服务介绍(包括:系统架构演变、微服务架构介绍、常见微服务架构),Spring Cloud Alibaba介绍(包括:Spring Cloud Alibaba 的定位、Spri…...
2023年网红营销10大趋势解读:品牌出海必看
前不久influencermarketinghub发布了《2023年影响者营销基准报告》,报告总结了3500多家营销机构、品牌和其他相关专业人士对当前网红营销现状的看法,以及预测了未来网红营销的一个发展趋势。本期Nox聚星就带领大家详细解读关于2023年网红营销的10大趋势。…...
Java学习笔记 --- 正则表达式
一、体验正则表达式 package com.javase.regexp;import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 体验正则表达式,给文本处理带来哪些便利*/ public class Regexp_ {public static void main(String[] args) {//假设,编写了爬虫&…...
【基础算法】字符串哈希
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
unity 多个模型或物体无限循环拖拽 类似无限列表循环
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ModelAnimal : MonoBehaviour { //需滑动的物体 public GameObject m_objA; //音乐 public GameObject m_objB; //电话 public GameObject m_objC; //导航 public GameObject m…...
GroupDocs.Merger for Java
GroupDocs.Merger for Java GroupDocs.Merger for Java是一个文档操作API,可帮助您合并、拆分、交换或删除文档页面。API通过启用或禁用密码提供保护,并允许开发人员加入PDF、Microsoft Word、Excel和Powerpoint文档。 支持的文件格式 Microsoft Office格…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...
中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...
[QMT量化交易小白入门]-六十二、ETF轮动中简单的评分算法如何获取历史年化收益32.7%
本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读1. 策略概述2. 趋势评分模块3 代码解析4 木头…...
JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/锁消除
目录 一 基础 1 概念 2 卖票问题 3 转账问题 二 锁机制与优化策略 0 Monitor 1 轻量级锁 2 锁膨胀 3 自旋 4 偏向锁 5 锁消除 6 wait /notify 7 sleep与wait的对比 8 join原理 一 基础 1 概念 临界区 一段代码块内如果存在对共享资源的多线程读写操作…...
C/Python/Go示例 | Socket Programing与RPC
Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流,会涉及到许多有意思的话题,诸如怎么确保对方能收到信息,怎么应对数据丢失、被污染或者顺序混乱,怎么提高…...
