【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

news2024/12/25 1:34:28

🏆🏆时间过的真快,这是导师回顾新星计划学习的第四篇文章!
最近这段时间非常忙,虽然导师首次参与新星计划活动已经在4月16日圆满结束,早想腾出时间来好好整理活动期间分享的知识点。
🏆🏆非常感谢大家的支持和活动期间的文章输出,导师也是忙里抽空给大家准备分享的内容,也是尽力了,所以分享的知识点主要是偏向于基础和基本的实战,虽然不是讲解的很系统,但是能够了解到一定的实战信息
🏆🏆期待我们的下次学习,导师将会在6月或者7月再次发起新星计划,本次活动也得到学员和平台的肯定,平台也是非常欢迎导师再次发起新星计划,非常感谢!

目录

  • 1、域名后缀
    • 1.1、后缀分类
    • 1.2、组成规则
  • 2、知识点
    • 2.1、函数分类
    • 2.2、自定义函数
      • 2.2.1、标量值函数
      • 2.2.2、表值函数
      • 2.2.3、修改函数
    • 2.3、存储过程
      • 2.3.1、创建无参数存储过程
      • 2.3.2、创建有参数存储过程
      • 2.3.3、修改存储过程
  • 3、模拟域名数据
    • 3.1、创建表
    • 3.2、创建函数取值范围
    • 3.3、随机获取数据
    • 3.4、随机长度和值
    • 3.5、创建函数域名中间值
    • 3.6、创建存储过程

  • 计划
    在这里插入图片描述

1、域名后缀

亦被称为顶级域名,是指代表一个域名类型的符号,不同后缀的域名有不同的含义。

1.1、后缀分类

域名共分为两类
1)国别域名:中国cn
2)国际通用域名:.com、.net等1000多种

  • 温馨提示
    后缀繁多,我们这里只模拟cn、com两种后面,且为顶级域名,其他后缀域名的含义感兴趣的学员可以了解下

1.2、组成规则

组成格式:协议(http/https)+域名等级(顶级域名/二级域名/三级域名)+域名组合(1到67位)+域名后缀
1)26个英文字母(没有大小写区分)
2)0~9,10个数字
3)下划线符号(不能出现在开头)

  • 温馨提示
    这里只针对顶级域名以及域名中间部分用字母和数字进行组合,且长度限制在2到18位长度域名,比如:https://www.csdn.net
    域名协议不进行保存,一般都是通过https进行访问

2、知识点

2.1、函数分类

常见的函数有如下几种:表值函数、标量值函数、聚合函数、系统函数。
这里只简单讲解【表值函数】和【标量值函数】
在这里插入图片描述

2.2、自定义函数

关键词:function
1)用于计算复杂逻辑,可以返回单个标量值或者结果集
2)能够接收传入参数,单不能输出传出参数
3)优点,模块化、执行速度更快、减少网络流量
如果在程序之间执行,特别是跨服务器数据库,每次需要把一大串执行sql语句通过网络传到目标服务器数据库是需要消耗比较大的流量,
所以定义成函数自然就减少了很多sql语句传送,直接就是一个函数名搞定

2.2.1、标量值函数

  • 代码
-- 创建标量值函数
go
    create function constData(@test int) returns int
    as
    begin
    -- 写自己的逻辑
    set @test+=1
    return @test
    end
go

-- 调用
declare @testValue int
set @testValue=1
select dbo.constData(@testValue) as 返回值
  • 效果
    在这里插入图片描述

2.2.2、表值函数

  • 方式一代码
-- 定义
create function funcName (@a int) returns table
as
return select top 10 studentName from student_score_20wan

-- 调用
select * from funcName(1)
  • 方式二代码
-- 定义
go
create function constTable (@test int) returns @tempTable table
(studentName nvarchar(50))
as
begin
    -- 写自己的逻辑
    insert into @tempTable(studentName)
    select top 10 studentName from student_score_30wan
    return
end
go

-- 调用
select * from constTable(1)
  • 方式二返回的效果
    在这里插入图片描述
  • 温馨提示
    详细可查看官方解释:https://learn.microsoft.com/zh-cn/sql/relational-databases/user-defined-functions/user-defined-functions?view=sql-server-ver16

2.2.3、修改函数

1)可视化界面修改
在这里插入图片描述
2)sql语句进行修改
通过上一步可视化界面点击修改后,同样也是跳转到sql语句界面,在界面可以查看修改使用了alter关键词
在这里插入图片描述

2.3、存储过程

关键词:proc
简单理解,存储过程的主要作用就是更加灵活集中处理各类简单或复杂场景功能,可以有入参和出参,以及获得结果集合。
存储过程优点
1)运行速度快,创建时已经编译,更加安全高效
2)可以编写更加复杂的数据库操作
3)更加能够节省网络流量,一般复杂sql语句肯定会写很多,如果每次都是通过网络传送,那必定消耗很大流量

2.3.1、创建无参数存储过程

可以先判断是否存在,不存在则创建,否则移除再创建或者其他操作
1)格式
create proc 名称
2)代码

-- 创建无参存储过程
if (exists (select * from sys.objects where name = 'proc_myProcOne'))
    drop proc proc_myProcOne
go
create proc proc_myProcOne
as
select top 10 * from student_score

-- 执行存储过程
exec proc_myProcOne;

3)效果
在这里插入图片描述

2.3.2、创建有参数存储过程

1)格式
create proc 名称(参数1,参数2,…)
2)代码

-- 创建多个参存储过程
if (exists (select * from sys.objects where name = 'proc_more_myProcOne'))
    drop proc proc_more_myProcOne
go
create proc proc_more_myProcOne(
    @studentName nvarchar(50),
    @courseName nvarchar(50)
)
as
select top 10 * from student_score 
where studentName=@studentName and courseName=@courseName

-- 执行存储过程
exec proc_more_myProcOne '陈珊歆','语文';

3)效果
在这里插入图片描述

2.3.3、修改存储过程

通过可以通过可视化界面修改,跳转到sql语句
在这里插入图片描述

🏆🏆 原则:Write Less Do More!
🍎🍎简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!

3、模拟域名数据

3.1、创建表

创建一张表用于保存域名数据

create table DomainData
(
    id int identity(1,1) primary key,
    guidData varchar(32),
    domainValue nvarchar(100),    -- 域名值,指中间部分
    domainLength int,            -- 域名长度,指中间部分
    domainType varchar(50),        -- 域名分类:cn、com
    addTime datetime
)

3.2、创建函数取值范围

创建一个表值函数,返回az和09的结果集

  • 代码如下
-- 定义函数:返回表变量结果集

go
    create function getTableRangeValue() returns @returnTable table
    (id int,value nvarchar(1))
    as
    begin
        -- 写自己的逻辑
        -- 定义表变量
        declare @tempTable table(
            id int identity(1,1) primary key, 
            value nvarchar(1)
        )
        
        insert into @tempTable values
        ('a'),('b'),('0'),('c'),('d'),('1'),('e'),('f'),('2'),('g'),('h'),('3'),('i'),('j'),('4'),
        ('k'),('l'),('5'),('m'),('n'),('6'),('o'),('p'),('7'),('q'),('r'),('8'),('s'),('t'),('9'),
        ('u'),('v'),('w'),('x'),('y'),('z')
        
        insert into @returnTable(id,value)
        select id,value from @tempTable
        return
    end
go
  • 调用函数效果如下
-- 调用代码
select * from getTableRangeValue()
  • 效果
    在这里插入图片描述
  • 温馨提示
    提示对象名无效,可不用管,直接可调用,如果不想提示下划线,可以先关掉sql工具再打开
    在这里插入图片描述

3.3、随机获取数据

通过随机排序获取第一条记录

  • 代码如下
declare @tempValue nvarchar(100)
select top 1 @tempValue=value from getTableRangeValue() order by newid()
print(@tempValue)
  • 效果如下
    在这里插入图片描述

3.4、随机长度和值

先随机生产域名长度,根据长度遍历上一步随机获取到的字符,最后拼接输出域名中间部分的值

  • 代码如下
declare @tempValue varchar(1)
declare @domainLengh int
declare @domainValue nvarchar(100)
set @domainValue=''    -- 必须先赋值,否则后面拼接值无效
-- 随机长度,2~12位
set @domainLengh=1+round(rand()*12,0)
while @domainLengh>0 begin
    set @domainLengh-=1
    select top 1 @tempValue=value from getTableRangeValue() order by newid()
    set @domainValue+=@tempValue
end
print('域名中间部分:'+@domainValue)
  • 效果如下
    在这里插入图片描述

3.5、创建函数域名中间值

通过定义标量值函数,返回域名中间值
1)域名取值范围,az,09
2)域名长度:2~12位

  • 常见情况

由于rand()这个函数无法在自定义函数内使用,
所以需要在函数内需要对这两个方式实现进行重新调整。
如果不是封装在函数和存储过程里,那么上面个函数是可以使用的
在这里插入图片描述
3)随机函数rand()替换(不推荐使用,存储高并发相同值)
通过毫秒时间取值技巧来实现随机效果

select convert(int,Datepart(ms,getdate())/(1000/(12-2+1))+2)

在这里插入图片描述
4)通过视图代替(推荐)
通过创建视图的方式获取到随机值,再通过随机值获取随机长度和随机编号。
从而代替rand()和newid()函数

go
create view randValueView
as
    select rand() randValue
go

在这里插入图片描述

5)改造后代码


go
    create function getDomainValue(@len int) returns varchar(12)
    as
    begin
        declare @domainLengh int
        declare @tempValue varchar(1)
        declare @randValue decimal(18,10)
        declare @randId int
        declare @domainValue nvarchar(100)
        set @domainValue=''
        
        -- 随机域名中间值位数
        if @len<>null begin
            set @domainLengh=@len
        end
        else begin
            -- 随机长度,2~12位
            select @randValue=randValue from randValueView
            set @domainLengh=2+round(@randValue*10,0)
        end
        
        -- 随机生产域名中间值
        while @domainLengh>0 begin
            set @domainLengh-=1
            -- 随机产生编号值(1~36)
            select @randValue=randValue from randValueView
            set @randId=1+round(@randValue*35,0)
            select top 1 @tempValue=value from getTableRangeValue() where id=@randId
            set @domainValue+=convert(varchar(1),@tempValue)
        end
        
        return @domainValue
    end
go

  • 效果
select dbo.getDomainValue(0) as 域名中间值

在这里插入图片描述

3.6、创建存储过程

通过创建存储过程来添加域名数据,上面步骤已经可以通过函数来获取到域名中间值,
接下来就是对域名表进行记录添加,以及开启作业定时执行添加操作

  • 代码如下
go
create proc proc_addDomain
as
begin
    declare @domainLength int
    declare @domainValue nvarchar(50)
    declare @tempValue nvarchar(50)
    select @tempValue=dbo.getDomainValue(0)
    set @domainLength=len(@tempValue)
    select @domainValue='www.'+ @tempValue+'.com'
    
    -- 添加一条记录
    insert into DomainData(guidData,domainValue,domainLength,domainType,addTime)
    values(newid(),@domainValue,@domainLength,'com',getdate())
end
  • 效果如下
exec proc_addDomain        -- 执行一次存储过程
select * from DomainData    -- 查询记录

在这里插入图片描述

  • 温馨提示
    打开域名链接时请注意哈,有可能是被进行的站点,不过一般会被屏蔽

🍎🍎 本篇到此结束,感谢阅读的小伙伴,打个小小的ad,欢迎关注导师的公众号【有趣小馆】,导师会时不时发布一些有趣好玩的功能,欢迎关注!

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

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

相关文章

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!...

作者&#xff1a; Billmay表妹 原文来源&#xff1a; https://tidb.net/blog/cf364859 2023 TiDB Future App Hackathon 来啦&#xff01;本届 Hackathon 的主题为&#xff1a;Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用…

JS逆向之大众点评mtgsig

本教程仅限于学术探讨&#xff0c;也没有专门针对某个网站而编写&#xff0c;禁止用于非法用途、商业活动、恶意滥用技术等&#xff0c;否则后果自负。观看则同意此约定。如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 目录 前言 一、先分析下接口参数 二、开导…

不懂这个118358-80-8甘露糖丝氨酸?看看Fmoc-Ser(Ac4Manα)-OH的全面解析吧!

Fmoc-Ser(Ac4Manα)-OH&#xff0c;甘露糖丝氨酸Product structure&#xff1a; Product specifications&#xff1a; 1.CAS No&#xff1a;118358-80-8 2.Molecular formula&#xff1a;C32H35NO14 3.Molecular weight&#xff1a;657.63 4.Packaging specification&#xff1…

浅谈响应式网页设计 —— 测试该知道的二三事

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

【LeetCode】每日一题 -- 1240. 铺瓷砖 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares/ 1. 题解&#xff08;1240. 铺瓷砖&#xff09; 23.05.31 华为机试第二题 1.1 暴力深搜 – DFS NP-Complete 问题 题解参考&#xff1a;Java DFS暴力递归&#xff08;详细注释&…

LeetCode 2352. Equal Row and Column Pairs【模拟,哈希表,前缀树】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

100G QSFP28光模块类型和使用场景

100G QSFP28光模块是当前数据中心和通信网络中广泛应用的高速光模块之一。本文将详细介绍100G QSFP28光模块的类型、应用场景以及市场发展前景&#xff0c;并引用相关产品参数和行业统计数据&#xff0c;为读者提供全面的了解。 一、100G QSFP28光模块类型 100G QSFP28光模块…

开源 API 网关的访问策略(一)

许多企业和组织面临着网关访问控制的挑战&#xff0c;因为传统的访问控制方法往往过于笨重和繁琐。这些方法可能涉及复杂的规则集、繁琐的手动配置过程、缺乏灵活性和可扩展性等问题。此外&#xff0c;随着云计算和移动设备的广泛应用&#xff0c;访问控制的复杂性和挑战程度也…

stable-diffusion-webui 安装采坑日记

这里写自定义目录标题 安装容易采坑的点效果测试 安装容易采坑的点 1、不愿安装大佬的整合包。在自己时间足够多的情况下&#xff0c;可以尝试自己搭环境。但是自己安装的时间成本真的非常高&#xff0c;环境配置报错会让人陷入崩溃&#xff0c;如果没有代码排错能力&#xff…

sw2urdf导出的urdf文件中的惯性参数(inertial)错误的问题

现象描述 有时候&#xff0c;当我们使用solidworks建好我们的模型&#xff0c;然后利用【sw2urdf】导出后&#xff0c;发现其中的惯性参数&#xff0c;似乎不正确&#xff0c;ixx、izz这些参数都是很接近0的&#xff1a; 资料查找 其实这个不是我们设置的问题&#xff0c;而…

蓝牙耳机什么牌子好?无线蓝牙耳机品牌推荐

相信很多人都有过这样的经历&#xff0c;早晚高峰像沙丁鱼般被挤在公交或地铁上&#xff0c;嘈杂的环境、工作的劳累让你只想听听音乐追追剧&#xff0c;给自己一些放松的时光。可拿出有线耳机却常常被挤掉&#xff0c;更有被扯到耳朵的时候。想换一款蓝牙耳机&#xff0c;但面…

做连接中国企业出海的全球技术桥梁,亚马逊云科技出海日盛夏盛启

出海路漫漫&#xff0c;企业开拓全球市场而孤军奋战&#xff0c;常常会感到力不从心。好的产品有了&#xff0c;渠道有了&#xff0c;供应链有了&#xff0c;还要自己从0-1搭建存储、网络和架构&#xff1f;营销季来了想趁机冲一波销量&#xff0c;还要自己运维本地IDC、大促来…

docker-compose 部署zookeeper集群 —— 筑梦之路

1. zookeeper介绍 Zookeeper是一个开源的分布式协调服务中间件&#xff0c;它提供了一种分布式数据管理服务&#xff0c;能够实现分布式锁、命名服务、配置管理、集群管理等功能&#xff0c;从而帮助用户构建高可用、高性能的分布式系统。以下是Zookeeper的一些主要特点和功能&…

Java注解的入门学习

一、概念 Java注解是一种元数据形式&#xff0c;可以被添加到Java代码中的各种元素&#xff08;类、方法、字段等&#xff09;上&#xff0c;以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性&#xff0c;它们不直接影响代码的执行&#xff0c;而是提供了一种机…

顺序表算法练习

一.顺序表基础算法 1.说明 博主这里是算法练习&#xff0c;帅气的读者来这里默认已经知道了它&#xff0c;这里主要是针对408考研真题中关于线性表的算法题进行编写。第一部分是根据课本编写线性表的基本函数&#xff0c;剩下四个部分是针对考研真题的算法练习。 2.C语言代码…

ChatGLM的模型架构

ChatGLM的部署微调等&#xff0c;很多资料&#xff0c;不再赘述。 P-tuning V2 以P-Turing V2为例&#xff0c;介绍ChatGLM的网络结构。P-tuning V2方法训练时冻结模型的全部参数&#xff0c;只激活prefix_encoder的参数。 1、prefix encoder 初始化pre_len&#xff0c;代表…

Apple pencil平替哪款好?平价电容笔测评

现今&#xff0c;使用电容笔的人越来越多&#xff0c;各大品牌厂商对电容笔各种性能的设计也愈发用心。那么&#xff0c;电容笔哪个品牌好用呢&#xff1f;下面&#xff0c;我来给大家推荐几款质量好的Apple pencil平替&#xff0c;需要的小伙伴可以当个参考。 一、如何挑选到…

Vue3+TS+Vite开发组件库并发布到npm

Vue2开发插件并发布到npm 使用VitePress静态网站生成器创建组件库文档网站并部署到GitHub 目标&#xff1a;创建 vue-amazing-ui 组件库 &#xff0c;并发布到npm 该组件库已发布到 npm&#xff0c;直接安装即可使用&#xff1a; pnpm i vue-amazing-ui #or yarn add vue-a…

(十一)K8S可视化工具Rancher学习、安装

1.Rancher背景概述 在过去几年中&#xff0c;容器技术如 Docker 和容器编排引擎如 Kubernetes 受到了广泛关注和采用&#xff0c;它们为应用程序的部署、可扩展性和管理带来了革命性的变化。 然而&#xff0c;随着容器技术的快速发展&#xff0c;容器集群的管理和操作变得越来…

【笔试强训选择题】Day21.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言 一、…