Procedure 存储过程(转)

本文详细介绍了SQL Server中存储过程(procedure)的概念及应用,包括创建、修改、删除存储过程的方法,以及如何利用存储过程提高系统的安全性与运行效率。文章还提供了具体的存储过程示例,并探讨了加密存储过程的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无疑,Procedure是一重大课题 。。
对于自定义Procedure,之前没有操作SQL-Server的经验 ,但是写Procedure却是比较熟手的,也是拜高老师所赐吧..
下面是一个之前程序用过的prodecure, 里面包括传入、传出的参数设置。

/**//****** Object:  Stored Procedure dbo.pro_CheckAdminLogin    Script Date: 2004-6-4 16:37:25 ******/
CREATE PROCEDURE  pro_CheckAdminLogin 
(
@username nvarchar(20),
@password char(32),
@lastloginip char(15),
@output int output
)
 
AS

if exists(Select id from admin where username=@username and password=@password)
    
begin
        
        
update admin set lastLoginIP=@lastloginip,lastlogintime=getdate() where username=@username
        
set @output=0  --验证通过
    end
else
begin
    
set @output=-1  --帐号密码不正确
end

GO
-----------
//
//Alter

Alter procedure Pro_procedureName 
as 
[SQL statements]

//Drop
Drop procedure pro_ProcedureName

通过阅读,了解到MS-SQLserver 的procedure 是可以加密的

Create procedure P_XXX
with encryption
as
[SQL statements]
go


Procedure的好处:
系统有预编译 即编译1次,大大提高效益
某些业务规则可在procedure里面完成, 方便修改(不需改源前后台程序)
当然,还有我才知道的加密--安全性提高 Encryption

SQL-server还提供系统Procedure(sp_)和扩展Procedure(xp_)

利用系统存储过程新添用户的例子:


EXEC sp_addlogin 'LALA_ConnectName','PWD','DB_Name'
go

----

相对也明白了,具有SA权限后 利用扩展Procedure可以操作windows命令行解释器,

Use Master [<--Master数据库是 SQL-server存放系统procedure的数据库]
go
EXEC xp_cmdShell 'dir C:\*.exe'

这个XP_CmdShell就是在SQLserver系统执行命令行的方法

估计前段时间Hack最多的SQL injected,多半是成功注入后利用这里进行下一步权限探讨..

### StarRocks 存储过程 (PROCEDURE) 使用方法 StarRocks 支持存储过程Procedure),这是一种可以封装复杂逻辑并重复使用的数据库对象。以下是关于 StarRocks 中 `PROCEDURE` 的语法及其使用示例。 #### 创建存储过程 在 StarRocks 中,可以通过 `CREATE PROCEDURE` 语句定义一个新的存储过程。其基本语法如下: ```sql CREATE PROCEDURE procedure_name(param1 type, param2 type, ...) BEGIN -- SQL statements or logic here END; ``` - **procedure_name**: 存储过程的名字。 - **param1**, **param2**: 可选参数列表,用于传递输入数据到存储过程中。 例如,下面是一个简单的存储过程示例,它接受一个日期字符串作为参数,并返回该日期对应的年份[^3]。 ```sql DELIMITER $$ CREATE PROCEDURE get_year(IN date_str VARCHAR(50)) BEGIN DECLARE year_val INT; SET year_val = CAST(SUBSTRING_INDEX(date_str, '-', 1) AS SIGNED); SELECT CONCAT('Year is ', year_val); END$$ DELIMITER ; ``` 此存储过程的功能是从给定的日期字符串中提取年份部分,并将其换为整数形式显示出来。 #### 调用存储过程 一旦创建了存储过程,就可以通过 `CALL` 命令来执行它。调用上面定义的过程的方法如下所示: ```sql CALL get_year('2023-07-18'); ``` 这会输出类似于 `'Year is 2023'` 的结果。 #### 删除存储过程 如果不再需要某个特定的存储过程,则可利用 `DROP PROCEDURE` 来移除它: ```sql DROP PROCEDURE IF EXISTS get_year; ``` 以上命令会在存在名为 `get_year` 的存储过程时删除之;如果没有找到对应名称的过程则不会报错。 --- ### 注意事项 尽管 StarRocks 提供了对存储过程的支持,但在实际应用当中需要注意以下几点: - 不同于传统的关系型数据库管理系统(RDBMS),如 MySQL 或 PostgreSQL,StarRocks 更专注于大规模数据分析场景下的高性能查询处理能力。因此,在设计涉及大量计算或者循环操作的存储过程时需谨慎考虑性能影响。 - 当前版本可能对于某些高级特性支持有限,请参照官方文档获取最新功能更新情况[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值