動態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;