动态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;