123常用存储过程集锦

合集下载

存储过程详细语法

存储过程详细语法

存储过程详细语法嘿,咱今儿就来唠唠存储过程详细语法这档子事儿!你说这存储过程啊,就像是一个魔法盒子,里面装满了各种奇妙的代码和逻辑。

它可不是一般的存在呀!它能让你的数据库操作变得高效又灵活。

先来说说这参数吧,就好比是给魔法盒子设定的开关,通过不同的参数输入,能得到不同的结果呢。

参数有输入参数和输出参数,输入参数就像是给盒子投喂原料,输出参数呢,就是盒子吐出来的成果。

然后是语句块,这可是存储过程的核心部分。

就好像是魔法盒子里的层层机关,各种条件判断、循环语句都在这儿大展身手。

什么 IF-THEN-ELSE 啦,WHILE 循环啦,都在这儿玩得不亦乐乎。

还有啊,存储过程里还能有变量呢!这变量就像是魔法盒子里的小精灵,它们可以存储各种数据,在程序运行过程中蹦蹦跳跳,发挥着重要作用。

再讲讲这游标,游标就像是一个在数据海洋里穿梭的小船,可以一行一行地读取数据,多有意思呀!你想想看,要是没有这些详细的语法,那存储过程不就成了一个空壳子啦?那还怎么高效地处理数据呀!就好比你要盖一座大楼,没有详细的设计图纸和施工规范,那能盖得起来吗?肯定不行呀!这存储过程详细语法就是那设计图纸和施工规范,让我们能有条不紊地搭建起数据库操作的大厦。

而且呀,学会了这些语法,你就像是掌握了一门绝世武功,在数据库的世界里可以自由驰骋啦!难道你不想成为这样的高手吗?你看那些厉害的程序员,哪个不是对存储过程详细语法了如指掌呀!他们能轻松地写出高效又漂亮的存储过程,让数据乖乖听话。

所以呀,别小瞧了这存储过程详细语法,它可是有着大用处呢!好好学起来吧,让你的数据库操作水平更上一层楼!你还在等什么呢?赶紧行动起来呀!。

SQL存储过程的语句(SQL存储过程)

SQL存储过程的语句(SQL存储过程)

SQL存储过程的语句(SQL存储过程)SQL语句集锦--语句功能--数据操作SELECT--从数据库表中检索数据⾏和列INSERT--向数据库表添加新数据⾏DELETE--从数据库表中删除数据⾏UPDATE--更新数据库表中的数据--数据定义CREATE TABLE--创建⼀个数据库表DROP TABLE--从数据库中删除表ALTER TABLE--修改数据库表结构CREATE VIEW--创建⼀个视图DROP VIEW--从数据库中删除视图CREATE INDEX--为数据库表创建⼀个索引DROP INDEX--从数据库中删除索引CREATE PROCEDURE--创建⼀个存储过程DROP PROCEDURE--从数据库中删除存储过程CREATE TRIGGER--创建⼀个触发器DROP TRIGGER--从数据库中删除触发器CREATE SCHEMA--向数据库添加⼀个新模式DROP SCHEMA--从数据库中删除⼀个模式CREATE DOMAIN --创建⼀个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除⼀个域--数据控制GRANT--授予⽤户访问权限DENY--拒绝⽤户访问REVOKE--解除⽤户访问权限--事务控制COMMIT--结束当前事务ROLLBACK--中⽌当前事务SET TRANSACTION--定义当前事务数据访问特征--程序化SQLDECLARE--为查询设定游标EXPLAN --为查询描述数据访问计划OPEN--检索查询结果打开⼀个游标FETCH--检索⼀⾏查询结果CLOSE--关闭游标PREPARE--为动态执⾏准备SQL 语句EXECUTE--动态地执⾏SQL 语句DESCRIBE --描述准备好的查询---局部变量declare@id char(10)--set @id = '10010001'select@id='10010001'---全局变量---必须以@@开头--IF ELSEdeclare@x int@y int@z intselect@x=1@y=2@z=3if@x>@yprint'x > y'--打印字符串'x > y'else if@y>@zprint'y > z'else print'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08when job_level = ’2’ then e_wage*1.07when job_level = ’3’ then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare@x int@y int@c intselect@x=1@y=1while@x<3beginprint@x--打印变量x 的值while@y<3beginselect@c=100*@x+@yprint@c--打印变量c 的值select@y=@y+1endselect@x=@x+1select@y=1end--WAITFOR--例等待1 ⼩时2 分零3 秒后才执⾏SELECT 语句waitfor delay ’01:02:03’select*from employee--例等到晚上11 点零8 分后才执⾏SELECT 语句waitfor time ’23:08:00’select*from employee***SELECT***select*(列名) from table_name(表名) where column_name operator valueex:(宿主)select*from stock_information where stockid =str(nid)stockname ='str_name'stockname like'% find this %'stockname like'[a-zA-Z]%'--------- ([]指定值的范围)stockname like'[^F-M]%'--------- (^排除指定范围)--------- 只能在使⽤like关键字的where⼦句中使⽤通配符)or stockpath ='stock_path'or stocknumber <1000and stockindex =24not stock***='man'stocknumber between20and100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by1,2--------- by列号stockname = (select stockname from stock_information where stockid =4) --------- ⼦查询--------- 除⾮能确保内层select只返回⼀个⾏的值,--------- 否则应在外层where⼦句中⽤⼀个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber +10" = stocknumber +10from table_nameselect stockname , "stocknumber" =count(*) from table_name group by stockname--------- group by 将表按⾏分组,指定列中有相同的值having count(*) =2--------- having选定指定的组select*from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的⽽table2中没有得以null表⽰ table1.id =* table2.id -------- 右外部连接select stockname from table1union[all]----- union合并查询结果集,all-保留重复⾏select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname =defaultStockname =nullStocknumber = Stockname +4***delete***delete from table_name where Stockid =3truncate table_name ----------- 删除表中所有⾏,仍保持表的完整性drop table table_name --------------- 完全删除表***alter table***--- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显⽰表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现删除列的⽅法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束***function(/*常⽤函数*/)***----统计函数----AVG--求平均值COUNT--统计数⽬MAX--求最⼤值MIN--求最⼩值SUM--求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求⼯资最⾼的员⼯姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三⾓函数***/SIN(float_expression) --返回以弧度表⽰的⾓的正弦COS(float_expression) --返回以弧度表⽰的⾓的余弦TAN(float_expression) --返回以弧度表⽰的⾓的正切COT(float_expression) --返回以弧度表⽰的⾓的余切/***反三⾓函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表⽰的⾓ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表⽰的⾓ATAN(float_expression) --返回正切是FLOAT 值的以弧度表⽰的⾓ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表⽰的⾓DEGREES(numeric_expression)--把弧度转换为⾓度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把⾓度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的⾃然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平⽅根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最⼩整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最⼩整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五⼊值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --⽤任选的[integer_expression]做种⼦值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数⽤于将ASCII 码转换为字符--如果没有输⼊0 ~ 255 之间的ASCII 码值CHAR 函数会返回⼀个NULL 值LOWER() --函数把字符串全部转换为⼩写UPPER() --函数把字符串全部转换为⼤写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的⼦串出现的开始位置SOUNDEX() --函数返回⼀个四位字符码--SOUNDEX函数可⽤来查找声⾳相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第⼀个字符不同--1 两个SOUNDEX 函数返回值的第⼀个字符相同--2 两个SOUNDEX 函数返回值的第⼀⼆个字符相同--3 两个SOUNDEX 函数返回值的第⼀⼆三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运⾏结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回⼀个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运⾏结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定⼦串的字符串/*select replace('abc123g', '123', 'def')运⾏结果如下----------- -----------abcdefg*/SPACE() --函数返回⼀个有指定长度的空⽩字符串STUFF() --函数⽤另⼀⼦串替换字符串指定位置长度的⼦串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression>AS<data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression>[, style])select cast(100+99as char) convert(varchar(12), getdate())运⾏结果如下------------------------------ ------------199 Jan 152000----⽇期函数----DAY() --函数返回date_expression 中的⽇期值MONTH() --函数返回date_expression 中的⽉份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定⽇期date 加上指定的额外⽇期间隔number 产⽣的新⽇期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定⽇期在datepart ⽅⾯的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回⽇期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回⽇期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的⽇期和时间----系统函数----APP_NAME() --函数返回当前执⾏的应⽤程序的名称COALESCE() --函数返回众多表达式中第⼀个⾮NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使⽤⽤于插⼊⼀个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理⽇期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值⽤指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回⼀个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。

数据库存储过程用法

数据库存储过程用法

数据库存储过程用法数据库存储过程使用指南数据库存储过程是一种预先编译并存储在数据库中的一组SQL语句。

它们可以通过调用名称来执行,使得数据库操作更加高效和灵活。

在本文中,我们将介绍数据库存储过程的一些常用用法。

1. 创建存储过程创建存储过程是使用数据库管理系统的功能之一。

下面是创建存储过程的步骤:1.使用CREATE PROCEDURE语句来定义存储过程的名称和参数。

2.在存储过程体中编写SQL语句和逻辑代码。

3.使用END语句结束存储过程的定义。

4.执行CREATE PROCEDURE语句,将存储过程保存到数据库中。

2. 调用存储过程调用存储过程可以使用EXEC或CALL关键字。

下面是调用存储过程的示例代码:EXEC procedure_name; -- 使用EXEC关键字调用存储过程CALL procedure_name; -- 使用CALL关键字调用存储过程3. 存储过程参数存储过程可以接受输入参数和输出参数。

下面是定义存储过程参数的示例代码:CREATE PROCEDURE procedure_name@input_param data_type, -- 输入参数@output_param data_type OUTPUT -- 输出参数ASBEGIN-- 存储过程逻辑代码END4. 存储过程中的条件判断和循环存储过程可以使用条件判断语句(如IF语句)和循环语句(如WHILE语句)来实现复杂的逻辑。

下面是使用条件判断和循环的示例代码:CREATE PROCEDURE procedure_nameASBEGIN-- 条件判断IF conditionBEGIN-- 逻辑代码END-- 循环WHILE conditionBEGIN-- 逻辑代码ENDEND5. 存储过程中的异常处理存储过程中可以使用异常处理语句(如TRY-CATCH语句)来处理错误和异常情况。

下面是使用异常处理的示例代码:CREATE PROCEDURE procedure_nameASBEGINBEGIN TRY-- 逻辑代码END TRYBEGIN CATCH-- 异常处理代码END CATCHEND6. 存储过程的优势与用途•性能优化:存储过程可以减少网络通信开销,提高数据库性能。

存储过程

存储过程

存储过程:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象。

在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升格式:
sql中的存储过程及相关介绍:
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} ]
[FOR REPLICATION]
AS 程序行
其中存储过程名不能超过128个字。

每个存储过程中最多设定1024个参数
(SQL Server 7.0以上版本),参数的使用方法如下:
@参数名数据类型[VARYING] [=内定值] [OUTPUT]
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

[内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。

[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。

存储过程语句

存储过程语句

存储过程语句1. 创建存储过程:CREATE PROCEDURE sp_GetEmployeeASBEGIN-- 代码逻辑END2. 带参数的存储过程:CREATE PROCEDURE sp_GetEmployeeByID@EmployeeID INTASBEGIN-- 代码逻辑END3. 存储过程中的条件判断:CREATE PROCEDURE sp_GetEmployeeByDepartment @DepartmentID INTASBEGINIF @DepartmentID = 1BEGIN-- 代码逻辑1ENDELSEBEGIN-- 代码逻辑2ENDEND4. 存储过程中的循环语句:CREATE PROCEDURE sp_UpdateSalaryASBEGINDECLARE @EmployeeID INTDECLARE @Salary DECIMAL(10,2)DECLARE @Counter INTSET @Counter = 1WHILE @Counter <= 10BEGINSET @EmployeeID = @CounterSET @Salary = @Counter * 1000 -- 更新员工薪水逻辑SET @Counter = @Counter + 1ENDEND5. 存储过程中的异常处理:CREATE PROCEDURE sp_InsertEmployee@EmployeeName NVARCHAR(50),@DepartmentID INTASBEGINBEGIN TRY-- 插入员工逻辑END TRYBEGIN CATCH-- 错误处理逻辑END CATCHEND6. 存储过程中的查询语句:CREATE PROCEDURE sp_GetEmployeeBySalaryRange @MinSalary DECIMAL(10,2),@MaxSalary DECIMAL(10,2)ASBEGINSELECT EmployeeID, EmployeeName, SalaryFROM EmployeesWHERE Salary >= @MinSalary AND Salary <= @MaxSalary END7. 存储过程中的更新语句:CREATE PROCEDURE sp_UpdateEmployeeName@EmployeeID INT,@NewName NVARCHAR(50)ASBEGINUPDATE EmployeesSET EmployeeName = @NewNameWHERE EmployeeID = @EmployeeIDEND8. 存储过程中的删除语句:CREATE PROCEDURE sp_DeleteEmployee@EmployeeID INTASBEGINDELETE FROM EmployeesWHERE EmployeeID = @EmployeeIDEND9. 存储过程中的插入语句:CREATE PROCEDURE sp_InsertNewEmployee@EmployeeName NVARCHAR(50),@DepartmentID INTASBEGININSERT INTO Employees (EmployeeName, DepartmentID) VALUES (@EmployeeName, @DepartmentID)END10. 存储过程中的返回结果:CREATE PROCEDURE sp_GetEmployeeCountASBEGINDECLARE @Count INTSELECT @Count = COUNT(*)FROM EmployeesRETURN @Count。

存储过程详解

存储过程详解

存储过程详解1,创建⼀个简单存储过程⽰例:create Procedure user --创建名为user存储过程as --指定过程要执⾏下⾯操作select * from tablenamego2,调⽤存储过程⽰例:exec user 或者 execute user执⾏后结果为:select * from tablename 查询的结果3,修改存储过程⽰例:alter Procedure 存储过程名4,删除存储过程⽰例:drop Procedure 存储过程名5,带⼀个参数的存储过程⽰例:if (exists (select * from sys.objects where name = 'user')) --如果有user这个存储过程drop Procedure user --删除usergocreate Procedure user --创建user存储过程(@UserID int) --声明⼀个输⼊参数asselect * from stud where studid=@UserID; --查询学⽣表中输⼊的userid的信息--执⾏user 存储过程exec user 1; --这⾥的1就是Userid6、创建带返回值的存储过程⽰例:if (exists (select * from sys.objects where name = 'user'))drop Procedure usergocreate Procedure user(@UserName varchar(20),--输⼊参数,⽆默认值@UserId int output --输⼊/输出参数⽆默认值,output 返回参数)asselect @UserId=studId from stud where studname=@UserName --通过UserName找UserId--执⾏User这个带返回值的存储过程declare @id int --声明⼀个变量⽤来接收执⾏存储过程后的返回值exec user '李四',@id output --执⾏存储过程。

存储过程实例精选

存储过程实例精选

存储过程实例精选存储过程是一组在数据库中执行的预编译的SQL语句。

它们是用来执行一系列的数据库操作,可以减少网络通信的次数,提高数据库性能,同时也可以确保数据的一致性和完整性。

在这篇文章中,我们将介绍一些存储过程实例的精选内容。

1.添加新用户存储过程可以用于添加新用户到数据库中。

当有新用户注册时,我们可以使用存储过程来验证用户输入的数据,如用户名和密码是否符合要求,然后将用户信息插入到用户表中。

此外,存储过程还可以对用户信息进行加密,并生成唯一的用户ID。

2.计算订单总额在一个电子商务网站中,有时需要计算订单的总额。

我们可以使用存储过程来计算订单中每个商品的价格,并将这些价格相加得到订单的总额。

通过使用存储过程,我们可以只向数据库发送一条SQL查询,而不是分别查询每个商品的价格,从而提高了查询性能。

3.更新库存存储过程也可以用于更新商品库存。

当用户购买商品时,我们可以使用存储过程来减少商品的库存数量。

在更新库存的过程中,存储过程可以检查商品的库存量是否足够,如果库存不足,则不允许用户购买。

4.备份数据库定期备份数据库是非常重要的,以防止数据丢失。

我们可以创建一个存储过程来自动备份数据库。

这个存储过程可以在指定的时间间隔内运行,并将数据库备份到指定的位置。

通过使用存储过程,我们可以快速方便地完成数据库的备份工作。

5.根据条件检索数据存储过程可以接受参数,并根据这些参数来检索数据。

例如,我们可以创建一个存储过程,接受一个日期作为参数,并返回在该日期之后的所有订单。

这样,我们可以根据需要灵活地检索数据库中的数据。

6.发送电子邮件通知存储过程还可以用于发送电子邮件通知。

例如,当有新订单时,我们可以使用存储过程来生成包含订单信息的电子邮件,并将其发送给相关的人员。

通过使用存储过程,我们可以将发送电子邮件的逻辑和业务逻辑分离,使代码更易于维护。

7.执行复杂的事务存储过程可以执行复杂的事务操作,例如同时更新多个表,保证数据的一致性。

存储过程详解

存储过程详解

存储过程详解存储过程的in参数宽度又外部决定,而out和in out的宽度是由存储过程内部决定。

此外in后面还可以带默认值,而out 和in out不能带默认值。

1.create or replace procedure procdefault(p1 varchar2,p2 varchar2 default'mark')2.as3.begin4. dbms_output.put_line(p2);5.end;6.SQL> set serveroutput on;7.SQL> exec procdefault('a');一、集合:索引表,也称为pl/sql表,不能存储于数据库中,元素的个数没有限制,下标可以为负值。

1.type t_table is table of varchar2(20) index by binary_integer;2.v_student t_table;嵌套表,索引表没有 index by子句就是嵌套表,它可以存放于数据库中,元素个数无限,下标从1开始,并且需要初始化1.type t_nestTable is table of varchar2(20);2.v_class t_nestTable ;仅是这样声明是不能使用的,必须对嵌套表进行初始化,对嵌套表进行初始化可以使用它的构造函数v_class :=t_nestTable('a','b','c');变长数组,变长数组与高级语言的数组类型非常相似,下标以1开始,元素个数有限。

也需要进行初始化。

type t_array is varray (20) of varchar2(20);由此可见,如果仅仅是在存储过程中当作集合变量使用,索引表是最好的选择。

二、游标:显示游标分为:普通游标,参数化游标和游标变量三种。

游标循环最佳策略我们在进行PL/SQL编程时,经常需要循环读取结果集的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用存储过程集锦,都是一些mssql常用的一些,大家可以根据需要选择使用。

=================分页==========================/*分页查找数据*/CREATE PROCEDURE [dbo].[GetRecordSet]@strSql varchar(8000),--查询sql,如select * from [user]@PageIndex int,--查询当页号@PageSize int--每页显示记录ASset nocount ondeclare @p1 intdeclare @currentPage intset @currentPage = 0declare @RowCount intset @RowCount = 0declare @PageCount intset @PageCount = 0exec sp_cursoropen @p1 output,@strSql,@scrollopt=1,@ccopt=1,@rowcount=@r owCount output --得到总记录数select @PageCount=ceiling(1.0*@rowCount/@pagesize) --得到总页数,@currentPage=(@PageIndex-1)*@PageSize+1select @RowCount,@PageCountexec sp_cursorfetch @p1,16,@currentPage,@PageSizeexec sp_cursorclose @p1set nocount offGO=========================用户注册============================/*用户注册,也算是添加吧*/Create proc [dbo].[UserAdd](@loginID nvarchar(50), --登录帐号@password nvarchar(50), --密码@email nvarchar(200) --电子信箱)asdeclare @userID int --用户编号--登录账号已经被注册if exists(select loginID from tableName where loginID = @loginID)beginreturn -1;end--邮箱已经被注册else if exists(select email from tableName where email = @email)beginreturn -2;end--注册成功elsebeginselect @userID = isnull(max(userID),100000)+1 from tableNameinsert into tableName(userID,loginID,[password],userName,linkNum,address,email,createTime,status) values(@userID,@loginID,@password,'','','',@email,getdate(),1)return @userIDend==========================sql server系统存储过程===================–1.给表中字段添加描述信息Create table T2 (id int , name char (20))GOEXEC sp_addextendedproperty 'MS_Description', 'Employee ID', 'user', dbo, 'table', T2, 'column', id EXEC sp_updateextendedproperty 'MS_Description', 'this is a test', 'user', dbo, 'table', T2, 'column', id –2.修改数据库名称EXEC sp_renamedb 'old_db_name', 'new_db_name'–3.修改数据表名称和字段名称EXEC sp_rename 'old_table_name', 'new_table_name'–修改数据表名称EXEC sp_rename 'table_name.[old_column_name]', 'new_column_name', 'COLUMN'–修改字段名称–4.给定存储过程名,获取存储过程内容exec sp_helptext sp_name/*以下是有关安全控制的系统存储过程或 SQL 语句,详细语法查阅《联机丛书》相关内容*/–创建新的 SQL Server 登录,使用户得以连接使用 SQL Server 身份验证的 SQL Server。

XEC sp_addlogin @loginame = '', @passwd = '', @defdb = '', @deflanguage = NULL, @sid = NULL, @encryptopt = NUL –使 Windows NT 用户或组帐户得以使用 Windows 身份验证连接到 SQL Server。

EXEC sp_grantlogin @loginame = ''–删除 SQL Server 登录,以阻止使用该登录名访问 SQL Server。

EXEC sp_droplogin @loginame = ''–阻止 Windows NT 用户或组连接到 SQL Server。

EXEC sp_denylogin @loginame = ''–从 SQL Server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 Windows NT 用户或组的登录项。

EXEC sp_revokelogin @loginame = ''–更改登录的默认数据库。

EXEC sp_defaultdb @loginame = '', @defdb = ''–更改登录的默认语言。

EXEC sp_defaultlanguage @loginame = '', @language = ''–添加或更改 SQL Server 登录密码。

EXEC sp_password @old = '', @new = '', @loginame = ''–添加服务器角色新成员。

EXEC sp_addsrvrolemember @loginame = '', @rolename = ''–添加服务器角色某成员。

EXEC sp_dropsrvrolemember @loginame = '' , @rolename = ''–为 SQL Server 登录或 Windows NT 用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限(授默认的“public”数据库角色)。

EXEC sp_grantdbaccess @loginame = '', @name_in_db = NULL–或EXEC sp_adduser @loginame = '', @name_in_db = NULL, @grpname = ''–从当前数据库中删除安全帐户。

EXEC sp_revokedbaccess @name_in_db = ''–或EXEC sp_dropuser @name_in_db = ''–在当前数据库创建新数据库角色。

EXEC sp_addrole @rolename = '', @ownername = ''–在当前数据库删除某数据库角色。

EXEC sp_droprole @rolename = ''–在当前数据库中添加数据库角色新成员。

EXEC sp_addrolemember @rolename = '', @membername = ''–在当前数据库中删除数据库角色某成员。

EXEC sp_droprolemember @rolename = '', @membername = ''–权限分配给数据库角色、表、存储过程等对象–1、授权访问GRANT–2、拒绝访问DENY–3、取消授权或拒绝REVOKE–4、Sample(pubs):GRANT SELECT ON authors TO LimperatorDENY SELECT ON authors TO LimperatorREVOKE SELECT ON authors TO Limperator====================数据库还原的存储过程============SQL codecreate proc killspid (@dbname varchar(20))asbegindeclare @sql nvarchar(500)declare @spid intset @sql='declare getspid cursor forselect spidfrom sysprocesseswhere dbid=db_id('''+@dbname+''')'exec (@sql)open getspidfetch next from getspidinto @spidwhile @@fetch_status <>-1beginexec('kill '+@spid)fetch next from getspidinto @spidendclose getspiddeallocate getspidendGO作用:杀掉传入数据库中的活动进程以进行备份还原等独占操作===================阿拉伯数字转大写中文=============例:输入12345,程序给出:壹万贰仟叁佰肆拾伍例:输入10023040,程序给出:壹仟另贰万叁仟另肆拾解决方案之一(在SqlServer2000中测试通过):SQL codeCREATE FUNCTION fun_cgnum(@num INT)RETURNS VARCHAR(100)ASBEGINDECLARE @temp INT,@res INT,@i TINYINTDECLARE @str VARCHAR(100),@no VARCHAR(20),@unit VARCHAR(16) SELECT @str='',@no='另壹贰叁肆伍陆柒捌玖',@unit='拾佰仟万拾佰仟亿'SET @temp=@numSELECT @i=0,@res=@temp%10,@temp=@temp/10WHILE @temp>0BEGINIF @i=0SET @str=SUBSTRING(@no,@res+1,1)ELSESET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str SELECT @res=@temp%10,@temp=@temp/10SET @i=@i+1ENDSET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str SET @str=REPLACE(@str,'另拾','另')SET @str=REPLACE(@str,'另佰','另')SET @str=REPLACE(@str,'另仟','另')SET @str=REPLACE(@str,'另拾','另')SET @str=REPLACE(@str,'另万','万')WHILE @i>0BEGINSET @str=REPLACE(@str,'另另','另')SET @i=CHARINDEX('另另',@str)ENDSET @str=REPLACE(@str,'另万','万')SET @str=REPLACE(@str,'亿万','亿')IF RIGHT(@str,1)='另'SET @str=LEFT(@str,LEN(@str)-1)RETURN @strENDGO--测试:有0和没有0的情况SELECTdbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(90 3002050)PS:有兴趣的朋友可以继续考虑有小数点以及添加单位(元/角/分)的情况。

相关文档
最新文档