資料庫系統概論05-動態SQL&儲存過程&函式
阿新 • • 發佈:2018-12-04
動態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;