数据库系统概论05-动态SQL&储存过程&函数

动态SQL

使用SQL语句主变量

EXEC SQL BEGIN DECLARE SECTION;
    const char *stmt="CREATE TABLE test(a int);"/*SQL语句主变量,内容是创建表的SQL语句*/
EXEC SQL END DECLARE SECTION;

EXEC SQL EXECUTE IMMEDIATE:stmt;/*执行准备好的语句,执行动态SQL语句*/

/*声明主变量*/
EXEC SQL PREPARE 语句名 FROM <SQL语句主变量>/*准备SQL语句*/
EXEC SQL EXECUTE 语句名 INTO 主变量表 USING <主变量或常量>/*执行动态SQL语句*/

动态参数:参数符号(?)表示在运行时设定该位置数据。PREPARE语句准备主变量和执行语句EXECUTE绑定数据。

储存过程

创建

CREATE OR REPLACE PROCEDURE 过程名(参数1,参数2) /*储存过程首部*/

AS <过程化SQL块>/*储存过程体,描述该储存过程的操作*/
CREATE OR REPLACE PROCEDURE REANSFER(inACCOUNT INT,outACCOUNT INT,amount FLOAT) /*储存过程首部*/

AS DECLARE/*定义变量,储存过程体,描述该储存过程的操作*/
    totalDepositOut Float;
    totalDepositIn Float;
    inAccountnum INT;
    BEGIN
    ...


--带参存储过程
if (object_id('proc_find_stu', 'P') is not null)
    drop proc proc_find_stu
go
create proc proc_find_stu(@startId int, @endId int)
as
    select * from student where id between @startId and @endId
go

exec proc_find_stu 2, 4;


--创建存储过程(不带参数)
if (exists (select * from sys.objects where name = 'proc_get_student'))
    drop proc proc_get_student
go
create proc proc_get_student
as
    select * from student;

--调用、执行存储过程
exec proc_get_student;

修改储存过程

ALTER PROCEDURE 过程名1 RENAME TO 过程名2;
ALTER PROCEDURE 过程名 COMPILE;

--修改存储过程
alter proc proc_get_student
as
select * from student;

删除储存过程

DROP PROCEDURE 过程名();
 

函数

创建

CREATE OR REPLACE FUNCTION 函数名(参数1,参数2) 

RETURNS <类型> AS <过程化SQL块>

执行

CALL/SELECT 函数名(参数1,参数2...)

修改

ALTER FUNCTION 过程名1 RENAME TO 过程名2;

猜你喜欢

转载自blog.csdn.net/xuxuan1997/article/details/83902239