數據庫系統概論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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章