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

MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证

功能Oracle语法MariaDB语法Oracle执行结果MariaDB执行结果
创建存储过程未使用参数和变量CREATE PROCEDURE p1 AS
BEGIN
NULL;
END p1;
/

DELIMITER //

CREATE PROCEDURE p1()
IS
BEGIN
NULL;
END //

DELIMITER ;

带有参数和变量CREATE PROCEDURE p1(p_input IN NUMBER, p_output OUT NUMBER) AS
v_variable VARCHAR2(100);
BEGIN
v_variable := 'Hello, World!';
p_output := p_input * 2;
END;
/
DELIMITER //
CREATE PROCEDURE p1(INOUT p_input INT)
BEGIN
DECLARE v_variable VARCHAR(100);
SET v_variable = 'Hello, World!';
SET p_input = p_input * 2;
END //
DELIMITER ;
创建存储函数CREATE FUNCTION f1(a VARCHAR2) RETURN VARCHAR2 IS
v_result VARCHAR2(100);
BEGIN
v_result := a || ' appended text';
RETURN v_result;
END;
/

DELIMITER //

CREATE FUNCTION f1(a VARCHAR(100)) RETURN VARCHAR(100)
IS
v_result VARCHAR(100);
BEGIN
SET v_result = CONCAT(a, ' appended text');
RETURN v_result;
END //

DELIMITER ;

游标带有FOR 循环显式游标

CREATE TABLE t1 (
a NUMBER,
b NUMBER
);

INSERT INTO t1 (a, b) VALUES (1, 2);
INSERT INTO t1 (a, b) VALUES (3, 4);
INSERT INTO t1 (a, b) VALUES (5, 6);

CREATE OR REPLACE PROCEDURE p1 AS
a_val t1.a%TYPE;
b_val t1.b%TYPE;
CURSOR cur IS SELECT a, b FROM t1;
BEGIN
FOR rec IN cur LOOP
a_val := rec.a;
b_val := rec.b;

DBMS_OUTPUT.PUT_LINE('a: ' || a_val || ', b: ' || b_val);
END LOOP;
END;
/

CREATE OR REPLACE PROCEDURE main_procedure AS
BEGIN
p1;
END;
/

-- 创建表 t1
CREATE TABLE t1 (
a INT,
b INT
);

-- 向表 t1 插入数据
INSERT INTO t1 (a, b) VALUES (1, 2);
INSERT INTO t1 (a, b) VALUES (3, 4);
INSERT INTO t1 (a, b) VALUES (5, 6);

-- 创建存储过程 p1
DELIMITER //
CREATE PROCEDURE p1()
BEGIN
DECLARE a_val INT;
DECLARE b_val INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT a, b FROM t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a_val, b_val;
IF done THEN
LEAVE read_loop;
END IF;
SELECT CONCAT('a: ', a_val, ', b: ', b_val) AS result;
END LOOP;
CLOSE cur;
END //
DELIMITER ;

-- 调用存储过程 p1
CALL p1();

带有 FOR 循环的隐式游标CREATE OR REPLACE PROCEDURE p1 IS
BEGIN
FOR rec IN (SELECT a, b FROM t1) LOOP
DBMS_OUTPUT.PUT_LINE('A = ' || rec.a || ', B = ' || rec.b);
END LOOP;
END p1;
/

DELIMITER //
CREATE PROCEDURE p1()
BEGIN
DECLARE a_value INT;
DECLARE b_value INT;

DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT a, b FROM t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;
read_loop: LOOP
FETCH cur INTO a_value, b_value;
IF done THEN
LEAVE read_loop;
END IF;

SELECT CONCAT('A = ', a_value, ', B = ', b_value) AS output;
END LOOP;

CLOSE cur;
END //
DELIMITER ;

带有参数和 FOR 循环的游标

CREATE OR REPLACE PROCEDURE process_cursor(prm_a IN INT, prm_b IN INT) IS
CURSOR c IS
SELECT a, b
FROM t1
WHERE a = prm_a AND b = prm_b;
BEGIN
FOR rec IN c LOOP
DBMS_OUTPUT.PUT_LINE('A: ' || rec.a || ', B: ' || rec.b);
END LOOP;
END process_cursor;
/

set serveroutput on
BEGIN
process_cursor(1, 2);
END;
/

DELIMITER //

CREATE PROCEDURE process_cursor(IN prm_a INT, IN prm_b INT)
BEGIN
DECLARE a_val INT;
DECLARE b_val INT;
DECLARE cur CURSOR FOR
SELECT a, b
FROM t1
WHERE a = prm_a AND b = prm_b;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET @finished = TRUE;
OPEN cur;
loop_label: LOOP
FETCH cur INTO a_val, b_val;
IF @finished THEN
LEAVE loop_label;
END IF;
SELECT CONCAT('A: ', a_val, ', B: ', b_val);
END LOOP;
CLOSE cur;
END //
DELIMITER ;


CALL process_cursor(1, 2);

s %ISOPEN, %ROWCOUNT, %FOUND, %NOTFOUND方式显式游标属性

SET SERVEROUTPUT ON;
BEGIN
DECLARE
CURSOR c IS
SELECT a, b
FROM t1;

v_a t1.a%TYPE;
v_b t1.b%TYPE;
BEGIN
OPEN c;
IF c%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('Cursor is open.');
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor is not open.');
END IF;
LOOP
FETCH c INTO v_a, v_b;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('A: ' || v_a || ', B: ' || v_b);
END LOOP;
IF c%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('No rows found.');
END IF;
IF c%ROWCOUNT > 0 THEN
DBMS_OUTPUT.PUT_LINE('Total rows: ' || c%ROWCOUNT);
END IF;
CLOSE c;
IF c%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('Cursor is open.');
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor is not open.');
END IF;
END;
END;
/

DELIMITER //
CREATE PROCEDURE process_cursor(prm_a INT, prm_b INT)
BEGIN
DECLARE v_a INT;
DECLARE v_b INT;
DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR SELECT a, b FROM t1 WHERE a = prm_a AND b = prm_b;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c;
IF (FOUND_ROWS() > 0) THEN
SET @output = CONCAT('Total rows: ', FOUND_ROWS());
SELECT @output;
ELSE
SET @output = 'No rows found.';
SELECT @output;
END IF;
loop_label: LOOP
FETCH c INTO v_a, v_b;
IF done = 1 THEN
LEAVE loop_label;
END IF;
SET @output = CONCAT('A: ', v_a, ', B: ', v_b);
SELECT @output;
END LOOP;

CLOSE c;
END //
DELIMITER ;

CALL process_cursor(1, 2);

相关文章:

MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证

功能Oracle语法MariaDB语法Oracle执行结果MariaDB执行结果创建存储过程未使用参数和变量CREATE PROCEDURE p1 ASBEGINNULL;END p1;/ DELIMITER // CREATE PROCEDURE p1()ISBEGINNULL;END // DELIMITER ; 带有参数和变量CREATE PROCEDURE p1(p_input IN NUMBER, p_output OUT NU…...

【AI驱动的数据结构:包装类的艺术与科学】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object,为了…...

初学stm32 --- PWM输出

目录 STM32 PWM工作过程​编辑 STM32 PWM工作过程(通道1为例) PWM模式1 & PWM模式2 向上计数配置说明​编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 ​编辑 PWM输出相关库函数 输出比较初始化函数: 设置比较值函数&a…...

ES6学习Iterator遍历器(七)

这里写目录标题 一、概念1.1、遍历器1.2、作用1.3、遍历过程 二、代码学习 一、概念 JavaScript 原有的表示“集合”的数据结构,主要是数组( Array )和对象( Object ),ES6 又添加了 Map 和Set 。这样就有了…...

重建大师软件做任务提示引擎错误?

原因1:打开工程用的本地路径,导致访问失败;解决方案:用网络路径打开工程,重新提交空三。 原因2:引擎主机对工程目录没有访问权限;解决方案:找到相应的引擎主机设置访问权限 重建大…...

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时,如果某个类别或者某些类别的数量远大于其他类别的话,模型在计算的时候,更倾向于拟合数量更多的类别;因此,观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…...

python的is和==运算符

在py中,有两个特别的运算符,is和分别用来判断两个变量是不是相同的和两个变量的值是不是相同。 1. is运算符:用来比较两个对象的身份,即判断两个变量是否指向内存中的同一个对象。 应用场景:1)单例模式&a…...

单节点calico性能优化

在单节点上部署calicov3273后,发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点,没有跨节点pod网段组网需要,禁用overlay方式网络(ipip,vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…...

React 19有哪些新特性?

写在前面 2024.12.5,React 团队在 react.dev/blog 上发表了帖子 react.dev/blog/2024/1… React 19 正式进入了 stable 状态 React 团队介绍了一些新的特性和 Breaking Changes,并提供了升级指南, React 19: 新更新、新特性和新Hooks Reac…...

视频生成缩略图

文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求&#xff0c;视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...

页面无滚动条,里面div各自有滚动条

一、双滚动条左右布局 实现效果 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Doc…...

DIY-ESP8266移动PM2.5传感器-带屏幕-APP

本教程将指导您制作一台专业级的空气质量检测仪。这个项目使用经济实惠的ESP8266和PMS5003传感器&#xff0c;配合OLED显示屏&#xff0c;不仅能实时显示PM2.5数值&#xff0c;还能通过手机APP随时查看数据。总成本70元&#xff0c;相比几百的用的便宜&#xff0c;用的心理踏实…...

【Canvas与技法】椭圆画法

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>椭圆的画法 Draft2</title><style type"text/css&quo…...

多核CPU调度是咋搞的?

其实很多情况下都有 这样的疑问 为什么多核CPU用着用着会“躺平”&#xff1f; 为什么手机有 8 核&#xff0c;跑分时性能却不是核心数的翻倍&#xff1f; 答案的钥匙&#xff0c;就藏在多核CPU的调度机制里。 为了更直观地理解&#xff0c;以一个《王者荣耀》游戏服务器为例…...

【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile

Jenkins Pipeline 是 Jenkins 中的一个强大功能&#xff0c;可以帮助你实现自动化构建、测试、部署等流程。Jenkins Pipeline 使用一种名为 Pipeline DSL&#xff08;Domain Specific Language&#xff09;的脚本语言&#xff0c;通常以 Jenkinsfile 形式存在&#xff0c;用于定…...

工作中如何提高技术实力?

点击“硬核王同学”&#xff0c;选择“关注/三连” 福利干货第一时间送达 大家好&#xff0c;我是硬核王同学。 其实这个问题困扰了我很久啊&#xff0c;不知道你们有没有跟我一样。 如何在工作中如何提高技术实力&#xff1f; 随着时间的增加&#xff0c;越来越觉得工作上…...

画图,matlab,

clear;close all;clc;tic;dirOutput dir(*.dat); % 罗列所有后缀-1.dat的文件列表&#xff0c;罗列BDDATA的数据 filenames string({dirOutput.name}); % 提取文件名%% 丢包统计 FILENAMES [""]; LOSS_YTJ [ ]; LOSS_RAD [ ]; LOSS_ETH [ ]…...

Java虚拟机类加载(解析阶段)[虚方法表的生成以及其存在意义]

class字节码文件中的常量池结构详解-CSDN博客Java虚拟机类加载(解析阶段)-CSDN博客...

电子元器件与电路之-MOS管的介绍和作用

一、基本概念 MOS 管&#xff0c;或MOSFET&#xff0c;全称是Metal-Oxide-Semiconductor Field-Effect Transistor&#xff08;金属 - 氧化物 - 半导体场效应晶体管&#xff09;。和三极管利用电流控制电流不同&#xff0c;它是一种利用电场效应来控制电流的半导体器件。和三级…...

python实现word转html

目录 使用mammoth库 使用spire.doc库 使用mammoth库 mammoth库支持将word转为HTML和markdown格式的文件。 import mammothdef word_html(word_file):html_save_name fr{word_file.split(.)[0]}.htmlwith open(word_file, rb) as f:data mammoth.convert_to_html(f)with o…...

nginx模块ngx-fancyindex 隐藏标题中的 / 和遇到的坑

首先下载nginx源码&#xff0c;编译时加上 --add-module/usr/local/src/ngx-fancyindex/ 例如 &#xff1a; ./configure --prefix/usr/local/nginx --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module…...

第二十四天 循环神经网络(RNN)LSTM与GRU

LSTM&#xff08;长短期记忆网络&#xff09;和GRU&#xff08;门控循环单元&#xff09;是两种流行的循环神经网络变体&#xff0c;它们被设计来解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。这两种网络都通过引入门控机制来控制信息的流动&#xff0c;从而能…...

RocketMQ如何保证消息顺序?

大家好&#xff0c;我是锋哥。今天分享关于【RocketMQ如何保证消息顺序?】面试题。希望对大家有帮助&#xff1b; RocketMQ如何保证消息顺序? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 作为一个分布式消息中间件&#xff0c;提供了高吞吐、低延迟的…...

LabVIEW实现GSM/GPRS通信

目录 1、GSM/GPRS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联…...

关于如何做技术文档

在技术的浩瀚海洋中&#xff0c;一份优秀的技术文档宛如精准的航海图。它是知识传承的载体&#xff0c;是团队协作的桥梁&#xff0c;更是产品成功的幕后英雄。然而&#xff0c;打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼&#xff1f;是否纠结…...

基于多尺度动态卷积的图像分类

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

RK3576 介绍

RK3576 介绍 1 介绍1.1 概述1.2 RK3576、RK3588、RK3568 和 RK3399 的参数对比 2 DataSheet2.1 RK35762.2 RK35882.3 RK35682.4 RK3399 参考 1 介绍 1.1 概述 ARM 64位高性能八核通用处理器&#xff0c;丰富的PCIE/USB3.0/SATA/GMAC等各类高速及CAN FD/DSMC/UART/SPI/I2C/I3C…...

如何评估并持续优化AI呼出机器人的使用效果

如何评估并持续优化AI呼出机器人的使用效果 作者&#xff1a;开源呼叫中心FreeIPCC 随着人工智能技术的发展&#xff0c;AI呼出机器人在企业中的应用越来越广泛。这些智能系统不仅提高了工作效率、降低了成本&#xff0c;还改善了客户体验。然而&#xff0c;要确保AI呼出机器…...

Ubuntu上如何部署Nginx?

环境&#xff1a; Unbuntu 22.04 问题描述&#xff1a; Ubuntu上如何部署Nginx&#xff1f; 解决方案&#xff1a; 在Ubuntu上部署Nginx是一个相对简单的过程&#xff0c;以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…...

制造业4.0:AI与机器人如何重塑生产线

引言&#xff1a;从传统到未来的转型 在轰鸣的生产线上&#xff0c;传统制造业曾以规模化生产和成本效益为核心竞争力&#xff0c;推动了全球工业化进程。然而&#xff0c;面对现代市场的多样化需求和激烈竞争&#xff0c;这种模式正暴露出越来越多的局限性&#xff1a;产能过剩…...