首页 > 数据库 >[20241110]使用xto10.sql脚本遇到的问题.txt

[20241110]使用xto10.sql脚本遇到的问题.txt

时间:2024-11-12 20:58:36浏览次数:1  
标签:20241110 16 -- ------------------------------ xto10 && sql

[20241110]使用xto10.sql脚本遇到的问题.txt

--//自己在使用xto10.sql脚本时,输入参数错误,我没有想到竟然执行有结果,例子:

SYS@book> @ xto10 d5f8b304 10
BASE10                         BASE10
------------------------------ ------------------------------
d5f8b304                       136591304

--//按照道理我输入一个16进制数,转换10进制,应该输入如下:

SYS@book> @ xto10 d5f8b304 ''

BASE16                         BASE10
------------------------------ ------------------------------
d5f8b304                       3589845764

SYS@book> @ xto10 d5f8b304 16

BASE16                         BASE10
------------------------------ ------------------------------
d5f8b304                       3589845764

--//注:如果没有参数2缺省16。
--//我前面执行也 成功,相当于

d5f8b304
d->13 f->15 b->11

13*10^7+ 5*10^6+ 15*10^5+ 8*10^4+ 11*10^3+ 304 = 136591304

--//主要问题是无法保证输入参数1的是对应进制X的类型,比如d5f8b304。例子:
SYS@book> @ xto10 z  2
BASE2                          BASE10
------------------------------ ------------------------------
z                              35
--//无法保证z是2进制数。导致结果出现35.
--//也就是先要根据参数2判断参数1是否符合需求,采用继续执行。

--//而16进制限制16进制码表,找不到z出现负数。
SYS@book> @ xto10 z 16
BASE16                         BASE10
------------------------------ ------------------------------
z                              -1

--//做一点改进,限制编码长度,并且如果n=-1,在显示结果时提示错误。
SYS@book> @ xto10 8d 10
BASE10                         BASE10                         ERRMSG
------------------------------ ------------------------------ ------
8d                             79                             bad!
--//注:d 在10进制取不到编码返回-1,这样计算结果时80-1=79.但是我判断里面出现返回-1的情况,ERRMSG显示错误。

SCOTT@book> @ xto10 8d 16
BASE16                         BASE10                         ERRMSG
------------------------------ ------------------------------ ----
8d                             141                            good

--//10tox.sql以及xtoy.sql脚本,也应该存在类似问题,有空也检查看看。

--//源代码修改如下:
$ cat xto10.sql
-- Copyright 2023 lfree. All rights reserved.
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions.
--------------------------------------------------------------------------------
--
-- File name:   xto10.sql
-- Purpose:     decimal convert Ximal
--
-- Author:      lfree
--
-- Usage:
--     @ xto10 <Ximal_value> Ximal
--     convert hexadecimal to decimal
--     @ xto10 <hexadecimal>
--     @ xto10 <hexadecimal> 16
--
--------------------------------------------------------------------------------
set term off
column 2 new_value 2
select null "2" from dual where 1=2;
select nvl('&2',16) "2" from dual;
set term on

column base10 format  a30
column base&&2 format a30
column errmsg format a6

SELECT CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END base&2, TO_CHAR (SUM (n * POWER (&2, p))) base10,min(decode(n,-1,'bad!','good')) errmsg
--SELECT CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END base&2, TO_CHAR (SUM (n * POWER (&2, p))) base10
  FROM (    SELECT   INSTR
                     (
                        CASE &&2
                           WHEN 32
                           THEN
                              '0123456789abcdfghjkmnpqrstuvwxyz'
                           WHEN 16
                           THEN
                              '0123456789abcdef'
                           ELSE
                              substr('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_',1,&&2)
                        END
                       ,SUBSTR
                        (
                           CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END
                          ,LEVEL
                          ,1
                        )
                     )
                   - 1
                      N
                  ,LENGTH ('&&1') - LEVEL P
                  ,SUBSTR ('&&1', LEVEL, 1) C
              FROM DUAL
        CONNECT BY LEVEL <= LENGTH ('&&1'));

标签:20241110,16,--,------------------------------,xto10,&&,sql
From: https://www.cnblogs.com/lfree/p/18542627

相关文章

  • Mysql大表处理方案:分区详解
    前言在我们日常处理海量数据的过程中,如何有效管理和优化数据库一直是一个既重要又具有挑战性的问题,较为通用的做法就是分区、分表、分库了。那我们应该如何选择这几种方式呢?下面本人记录以下几种方式的优劣,希望能够帮助到大家。首先分区:数据库中分区是将表或索引的数据划分成......
  • mysql修改/删除
    mysql增删改查中的改使用update表名set列名条件where;  matched是当前表有几行,changed是执行了几行,warnings是警告删除deleteform表名where条件;删除表里的某行信息 deletefrom表名;是删除整张表数据 ......
  • mysql创建表
    创建表创建表要先选中数据库名createtable表名(列名类型)来进行创建,列名可以存在多个,表名和列名不可以一样,想要一样的话就要使用反引号把表名和列名引起来列名在前面,类型在后面查看所有表showtables查看当前数据库所有表 查看指定表的结构desc表名;把表的特征描述出......
  • mysql查询
    全列查询使用select*from表名;把表中所有的行和列全部都查询出来  指定列查询select列名,列名from表名; 查询字段为表达式可以边查询边计算,查询的时候把列名构成的表达式,把这一列中的所有行都带入到表达式中进行运算,且操作的数据不会在更改原来的数据select列名......
  • Linux二进制安装 MySQL 5.7.44
    1.下载MySQL5.7.44的二进制文件首先,访问MySQL官网下载页面,选择适合你操作系统架构(如x86_64)的二进制安装包。访问官网:MySQLDownloads在页面中选择适合你系统的版本(比如Linux的 tar 包)。下载Mysql  https://download.csdn.net/download/m0_58223765/89975252例......
  • PostgreSQL的奥秘:深入探究事务与锁的秘密世界
    PostgreSQL事务1.概述在数据库系统中,事务(Transaction)是执行数据库操作的最小逻辑单位。它确保了一组操作的完整性和一致性。事务可以通过显式的BEGIN、COMMIT和ROLLBACK语句块来控制,也可以在自动提交模式(autocommit)下隐式执行单条语句。在自动提交模式下,每条SQL......
  • SQLServer定时备份
    SQL备份项目上为了避免风险,会自动定时进行数据库备份。记笔记,保证自己忘了的时候,能够根据笔记快速想起来首先确保,SQLServer代理已启用。1.新建维护计划2.完全备份任务,记得修改保存路径,和计划备份时间步骤一点击【确定】添加子计划,备份差异数据库......
  • 详解连接 MySQL8.4 出现 Client does not support authentication protocol requested
    文章目录项目场景问题描述原因分析解决方案方案一(不推荐)方案二(推荐)总结项目场景在开发过程中,我们在Node.js项目中使用MySQL数据库,并且通过typeorm和mysql库进行数据库连接。然而,在项目启动时,遇到了数据库连接失败的问题,导致项目无法正常运行。问题描述......
  • 深入理解MySQL索引的底层原理和优化
    深入理解MySQL索引的底层原理和优化1.什么是索引索引是帮助MySQL高效获取数据的排好序的数据结构。用于提高查询性能,相当于书的目录。比如我们在读一本书的时候,首先是通过目录来定位到文章的页码,然后通过页码再来快速定位到具体的内容。MySQL中也是一样,在查询数据的时候,首先看......
  • System.Data.SqlClient is not supported on this platform.
    异常: 程序在修改了非数据库相关的代码后发布进行部分覆盖,抛出异常,本次并未覆盖数据库相关的dll查询解决方案都给出的是,将本地的Microsoft.Data.SqlClient.dll拷贝到发布处覆盖,这种方式不行本次原因:之前发布是目标运行时选的“可移植”,部署地方还是保持可移植,而本次因其他地......