故障分析 | OceanBase 一则函数报错问题分享

实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群 迁移 MySQL 数据到 OceanBase 集群 阅读详情

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


今天遇到一个 OceanBase 数据库下 Oracle 租户的 PLSQL 分隔符问题,特来分享下。

我的初衷是对 Oracle 租户下的一张表造点随机数据,写好了 INSERT 语句,却提示没有函数 dbms_random.value 。于是查阅 OceanBase 官方文档,发现需要导入系统包 dbms_random !dbms_random 系统包存放在 OceanBase 安装目录下的 admin 子目录里,包含两个 SQL 文件,一个是包的声明 SQL:dbms_random.sql;另一个是包的定义 SQL:dbms_random_body.sql 。

我在 obclient 下导入这两个 SQL 文件,直接报语法错误。官方给的 SQL 文件怎么可能有语法错误呢?估计是我没有完全按照文档来规范操作而导致的问题。

最终我把报错的地方提取出来,整理成如下简单函数:

 create or replace function tt return number is
 v1 number;
 v2 number;
 begin
   v1 := 10;
   v2 := sqrt(-2 * ln(v1)/v1);
   return v2;
 end;
 /

直接执行这个函数,也是报同样的错误。

<mysql:5.6.25:SYS> create or replace function tt return number is
    ->  v1 number;
    ->  v2 number;
    ->  begin
    ->    v1 := 10;
    ->    v2 := sqrt(-2 * ln(v1)/v1);
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'sqlrt(2 * ln(v1)' at line 6
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'v1)' at line 1
<mysql:5.6.25:SYS>   return v2;
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'return v2' at line 1
<mysql:5.6.25:SYS> end;
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'end' at line 1
<mysql:5.6.25:SYS> /
    -> ;
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near '/' at line 1
<mysql:5.6.25:SYS>

于是我把这个函数在我本地的 Oracle 环境中执行,一切正常:看来是 OceanBase 自身的环境问题。

create or replace function tt return number is
 v1 number;
 v2 number;
 begin
   v1 := 10;
   v2 := sqrt(-2 * ln(v1)/v1);
   return v2;
 end;
  2    3    4    5    6    7    8    9   /

Function created.

Elapsed: 00:00:00.02
YTT@helowin> 

这个函数写的非常简单,求一个给定参数的平方根。刚开始我以为函数写的有问题,于是我把函数改为这样:

v2 := sqrt(-2 * ln(v1));

竟然顺利执行成功了。

<mysql:5.6.25:SYS>  create or replace function tt return number is
    ->  v1 number;
    ->  v2 number;
    ->  begin
    ->    v1 := 10;
    ->    v2 := sqrt(-2 * ln(v1));
    ->    return v2;
    ->  end;
    ->  /
Query OK, 0 rows affected (0.050 sec)

直到最后经过和 Oracle 环境的对比,我才发现是 PLSQL 分隔符的问题。OceanBase 的 Oracle 租户里默认 PLSQL 的分隔符是/,刚好和除法/冲突,这样遇到除法符号就以为是函数定义结束,所以报语法错误。

那正确的写法应该是改变默认分隔符为//: 改分隔符后的函数创建成功。

<mysql:5.6.25:SYS>delimiter //
<mysql:5.6.25:SYS>  create or replace function tt return number is
    ->  v1 number;
    ->  v2 number;
    ->  begin
    ->    v1 := 10;
    ->    v2 := sqrt(-2 * ln(v1)/v1);
    ->    return v2;
    ->  end;
    ->  //
Query OK, 0 rows affected (0.114 sec)

特此分享给使用 OceanBase 的同学。

从单极性到双极性:深入理解SPWM在逆变电路中的调制差异与选型指南 本文深入探讨了SPWM在逆变电路中的单极性与双极性调制差异,从谐波失真、开关损耗到滤波成本等多个维度进行对比分析。通过实际案例和实验数据,为工程师在光伏逆变器、储能系统等应用中提供选型指南,帮助优化系统性能和成本效益。 阅读详情

相关推荐

check the manual that corresponds to your MySQL server version for the right syntax to use完美解决

check the manual that corresponds to your MySQL server version for the right syntax to use near方法有六个: 1、在数据库表冲突字段前后加 `符号(键盘Tab键上面那个键),就不会再报语法错误了; 2、修改数据库表中冲突字段名称,修改为和 SQL语句关键字不冲突的其他名称。 3、navicat工具不可以,命令行可以。 check the manual that corresponds to your MySQ

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 17万+

OceanBase实验4:迁移MySQL数据到OceanBase集群

实验4:迁移MySQL数据到OceanBase集群。

hyu1989的专栏 2083

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

Mysql异常check the manual that corresponds to your MySQL server version for the right syntax总结

异常信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ….. 错误总结: 1.检查sql是否有中文字符 2.检查sql字段是否与关键字冲突,如desc,join等 3.

super-pf的博客 6万+

遗传算法优化光学超表面:智能设计突破纳米结构瓶颈

光学超表面设计本质上是一个高维、非线性、离散每个结构单元(如纳米砖柱、孔洞、十字架)有多个参数(长、宽、高、旋转角、材料),整个阵列的参数组合数量随单元数指数级增长。性能指标(如聚焦效率、工作带宽、偏振转换率、特定角度响应)往往无法用简单解析式表达,需依赖计算密集型电磁仿真(如FDTD, FDFD, RCWA)来评估。结构参数微小变化可能引起光学响应的剧烈跃变,目标函数存在多个局部最优解。实际制造通常要求结构参数取自有限的离散值(如特定刻蚀深度、材料库)。

weixin_51101456的博客 1141

高速电路的信号完整性分析

摘要:介绍了高速PCB设计中的信号完整性概念以及破坏信号完整性的原因,从理论和计算的层面上分析了高速电路设计中反射和串扰的形成原因,并介绍了IBIS仿真。 关键词:信号完整性 反射 串扰 IBIS仿真 随着半导体技术和深压微米工艺的不断发展,IC的开关速度目前已经从几十MHz增加到几百MHz,甚至达到几GHz。在高速PCB设计中,工程师经常会碰到误触发、阻尼振荡、过冲、欠冲、串...

bh_wang的专栏 1431

OceanBase 特殊的 INT 与时间类型隐式转换问题

此报错仅抛出报错到obs.log。我这边猜测是因为只在UPDATE的时候会遵循严格模式,而SELECTUPDATE多了上层的,调用入口不一样,而根据这个方法,大致猜测是因为SQL_MODE的严格模式导致。验证下猜想,看起来清空SQL_MODE后,UPDATE果然能插入成功。可能我的猜测有问题,但个人能力有限,欢迎大家一起指正和讨论。

ActionTech的博客 1628

electron windows设置镜像地址环境变量报错npm error `ELECTRON_MIRROR` is not a valid npm option

如果你是在使用某个特定的脚本或配置文件,请检查该文件中是否有不正确的配置项,并进行相应的修正。确保你遵循electron的官方安装指南,并且没有包含不必要的或错误的配置选项。如果问题依然存在,可以查看npm的官方文档或者相关社区获取更多帮助。

qq_36158551的博客 3322

如何进行“服务器内部错误”的诊断 | OceanBase诊断案例

本文将分享一例OceanBase的诊断案例,介绍OMS 关联 OCP时, 报服务器内部错误时的诊断过程与思路

OceanBase分布式数据库的博客 1185

k8s配置habor作为镜像地址之后,如果harbor中没有镜像,如何设置自动从阿里云官方镜像仓库下载

通过 Harbor 的远端仓库可以集中管理。如果你在上游设置了 image prefix 为 library,那么对外访问 harbor.your-domain.com/library/nginx:latest 就会被 Harbor 去上游拉取 registry.cn-hangzhou.aliyuncs.com/library/nginx:latest 并缓存。- 将集群中的镜像地址改为 Harbor 的域名,比如 harbor.your-domain.com/library/nginx:latest。

极客栈 422

2026年软考高级网络规划设计师备考指南

在国家网络安全法律法规和政策的指导下,能够依据网络技术发展的趋势进行计算机网络领域的需求分析、规划设计、部署实施、评测、运行维护等工作。 在需求分析阶段,写出网络系统需求规格说明书;在规划设计阶段,完成逻辑结构设计、物理结构设计,选用适宜的网络设备,按照标准规范编写系统设计文档及项目开发计划;在部署实施阶段,组织项目施工,对项目实施过程进行质量控制、进度控制、成本管理,能具体指导项目实施;在评测运维阶段,能根据相关标准和规范对网络进行评估测试,能制定运行维护、故障分析与处理机制,确保网络提供正常服务;

鹿鸣天涯 1万+

技术分享 | MemAvailable 是怎么计算的

作者:胡呈清爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

ActionTech的博客 544

若依框架二次开发——若依 Vue3 版本前端样式优化指南

若依框架二次开发——若依 Vue3 版本前端样式优化指南

bjzhang75的博客 1692

数据库运维校招笔试核心考点与备考策略解析

数据库运维岗位的笔试考核,往往不只是一张SQL语法或命令行的试卷,而是对MySQL原理、Linux基础、网络排查与工程思维的全面检验。无论是B+树索引的命中逻辑、事务隔离级别与MVCC的实现机制,还是redo log、binlog构成的主从复制链路,都指向同一个核心——理解系统运行的底层规律。扎实的原理功底不仅决定了故障排查的效率,更决定了高可用架构设计与数据恢复方案的可靠性。对于正在准备校招或转岗运维的工程师而言,围绕索引优化、锁分析、日志机制、备份恢复等高频考点建立系统化知识框架,同时补充Shell自动

weixin_34384557的博客 343

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)

qq_42135020的博客 2081

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SQL报错——check the manual that corresponds to your MySQL server version for the right syntax to use

创建数据表时,字段名不能是read,会有冲突的

weixin_44911775的博客 516

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

重建sql语句时报ErrorCode = 900, SQLState = 42000, Details = ORA-00900: You have an error in your SQL synta

重建sql失效索引,语句时报ErrorCode = 900, SQLState = 42000, Details = ORA-00900: You have an error in your SQL syntax;

belong113的博客 2520

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

check the manual that corresponds to your MySQL server version for the right syntax to use near报错

今天在mapper文件写sql查询语句总报错,显示语法不对 反反复复看了好几遍也没找到问题 后来才发现这个count(*)中间不能有空格

weixin_46828443的博客 1195

check the manual that corresponds to your MySQL server version for the right syntax to use near异常原因

check the manual that corresponds to your MySQL server version for the right syntax to use near异常原因 check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE 价格=12’ at line 1 注意这种一般情况下是语法问题,说明mysql的各种语句还是不够熟练, (

周帅的博客 1193

check the manual that corresponds to your MySQL server version for the right syntax报错另一种解决方法

Error: INSERT INTO post(title, author, content, dateline)values(‘标题’, ‘作者’, ‘文章内容’, 2018-07-28’) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f...

暮影重生 2855

一篇文章让你解决sql报错check the manual that corresponds to your MySQL server version for the right syntax to

一篇文章让你解决sql报错 反馈 因为这一个问题,找到了很多类似问题,你在看到这篇博客时,可能不是这个,但是一定是下面其中一个: Mysql错误:check the manual that corresponds to your MySQL server version for the right syntax【加 `符号、修改有冲突的字段名】 check the manual that corresponds to your MySQL server version for the right synta

itboy_xiaowei的博客 8万+

MySQL在创建表的时候出现1064的错误:You have an error in your SQL syntax; check the manual that corresponds to...

MySQL在创建表的时候出现1064的错误:You have an error in your SQL syntax; check the manual that corresponds to... 查询视图时出现这样的报错,原因大部分是由于语法错误 这次的原因是由于创建视图的数据源表中有一个字段不存在,但是之前存在,现在这个数据源表被重新建立,但是视图中的那个被删除的字段无定义,所以出现了上述的错误。 ...

HQqHQhqqhq的博客 2975

check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHE

报错 check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE...... mapper <update id="updateByProductedId" parameterType="XqProduct"> UPDAT...

MyHaloJ 1732

Sql语句错误:check the manual that corresponds to your MySQL server version for the right syntax to use..

背景 在做项目的时候,测试写的Sql语句,然后报错如题和下图。 我起初以为是Sql版本问题 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com...

qq_43684005的博客 1365

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

今天借助pdsheel16制作的pdm格式的表,转化成sql文件,但在终端数据库运行时出现了如下错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use...

~牧马~ 1万+

check the manual that corresponds to your MySQL server version for the right syntax错误

这个错误肯定是你的sql语句出错了,一般有三种情况:1.拼写错误,我曾经把show databases;写成了show database;结果报错。2.语法错误。3,数据库(database)或者表(table)的名称用了数据库的关键字。...

u010883226的专栏 1675
上一篇: 故障分析 | 报错 ERROR 5270 -HY000-- object not in RECYCLE BIN 引发的几个思考
下一篇: 故障分析 | 一次规律的 MySQL 主从延迟跳变
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值