中国:昆明 云南省专业数据恢复公司 拥有自己数据恢复技术专利; 自主研发数据恢复软件 【设为首页】【加入收藏

昆明数据恢复-云南数据恢复公司|硬盘数据恢复|服务器数据恢复|昆明浩高官网 alt=

云南省某税务局16块盘RAID5上门恢复成功 曲靖市人民检察院HP服务器2块黄灯恢复成功 NAS存储8块盘RAID5 苹果系统恢复成功
昆明北京现代4S店DELL服务器恢复成功 用友财务SQL数据库二次数据恢复成功 金蝶软件质疑二次SQL数据库修复成功
临沧供电局HP服务器8块盘RAID6恢复成功 云南云天化工股份有限公司服务器恢复成功 NAS存储8块盘RAID5 LINUX系统恢复成功
昆明数据恢复 - 图1445 温馨提示:发现数据丢失的时候,请勿惊慌 ,我们建议您立即停止操作及时咨询我们,以免不恰当的操作造成无法恢复!
常见故障:服务器RAID阵列恢复、SQL数据库修复、物理坏道、硬盘开盘、监控录像、U盘芯片恢复,二次数据恢复业务!
当前位置: 主页 > 技术文章 > 技术文章 >

sqlserver、db2、oracle存储过程动态sql语句示例

时间:2015-03-23 12:32来源:未知 作者:admin 点击:

Oracle

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE PROCEDURE a_test
AS
    t_sql   VARCHAR2(2000);
    t_a     VARCHAR2(20);
    t_b     VARCHAR2(20);
    t_c     VARCHAR2(20);
    t_d     VARCHAR2(20);
BEGIN
    t_c   := 'f';
    t_d   := 'g';
    
    
    --这里可为insert 等任何sql语句.
    t_sql := 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';
    
    EXECUTE IMMEDIATE t_sql
    INTO  t_a, t_b  --如果不需要查询赋值,这里不用写 INTO XXX语句.
    USING t_c, t_d  -- 如果不需要使用变量,不用写USING XXX语句.
    ;
END a_test;
/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--带返回游标的动态执行语句.
CREATE OR REPLACE PROCEDURE a_test2
(
    o_cursor OUT SYS_REFCURSOR
)
AS
    t_sql   VARCHAR2(2000);
    t_a     VARCHAR2(20);
    t_b     VARCHAR2(20);
    t_c     VARCHAR2(20);
    t_d     VARCHAR2(20);
BEGIN
    t_c   := 'f';
    t_d   := 'g';
    
    
    --这里可为insert 等任何sql语句.
    t_sql := 'SELECT * FROM t1 WHERE c = :tempC OR c = :tempD';
 
    OPEN  o_cursor FOR t_sql
    USING t_c, t_d   -- 同样如果不需要使用变量,不用写USING XXX语句.
    ;
END a_test2;
/

 

SQL Server
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE PROCEDURE a_test
AS
    DECLARE @t_sql   NVARCHAR(2000);  --sql server 动态语句要申明为NVARCHAR类型.
    DECLARE @t_a     VARCHAR(20);
    DECLARE @t_b     VARCHAR(20);
    DECLARE @t_c     VARCHAR(20);
    DECLARE @t_d     VARCHAR(20);
BEGIN
    SET @t_c = 'f';
    SET @t_d = 'g';
    
    --这里可为insert 等任何sql语句.
    SET @t_sql = 'SELECT @tempA = MAX(a), @tempB = MAX(b) FROM t1 WHERE c = @tempC OR c = @tempD';
    
    --不可在EXECUTE SP_EXECUTESQL后边拼接字符串
    EXECUTE SP_EXECUTESQL @t_sql
    
    --如果不带参数,以下申明变量及传入参数都不需要写.
    --申明变量类型及出入参.必须一行写完,不能换行.
    ,N'@tempA VARCHAR(20) OUT, @tempB VARCHAR(20) OUT, @tempC VARCHAR(20), @tempD VARCHAR(20)'
    -- 参数值.  传入变量的顺序要与申明变量的顺序一致,
    ,@t_a OUT, @t_b OUT, @t_c, @t_d
    ;
END
GO
--sql server返回游标与普通的语句一样,直接将t_sql赋值成 select * from XXX 即可.

Db2

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE PROCEDURE a_test
(
    v_c           VARCHAR(20)
)
BEGIN
    DECLARE t_sql VARCHAR2(2000);
    DECLARE t_a   VARCHAR2(20);
    DECLARE t_b   VARCHAR2(20);
    DECLARE t_c   VARCHAR2(20);
    DECLARE t_d   VARCHAR2(20);
    -- FOR 后边的t_stmt要与下边的 prepare后的变量一致,其类型为 statement.
    DECLARE t_cur CURSOR FOR t_stmt;
 
    SET t_c = 'f';
    SET t_d = 'g';
    
    --这里可为insert 等任何sql语句.
    SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';
    
    --我目前在这里没找到其它方式来替代,只能使用游标读取:
    PREPARE t_stmt FROM t_sql;
    
    OPEN t_cur
    --如果不需要使用变量,不用写USING XXX语句.
    USING t_c, t_d
    ;
    
    FETCH t_cur INTO t_a, t_b;
    CLOSE t_cur;
END

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
带游标返回的动态语句与普通语句一样,只是申明游标时,要申明返回类型的游标
并且在begin关键字之前需要插入:
DYNAMIC RESULT SETS 1
LANGUAGE SQL
*/
 
CREATE PROCEDURE a_test2
(
    v_c           VARCHAR(20)
)
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
    DECLARE t_sql VARCHAR2(2000);
    DECLARE t_a   VARCHAR2(20);
    DECLARE t_b   VARCHAR2(20);
    DECLARE t_c   VARCHAR2(20);
    DECLARE t_d   VARCHAR2(20);
    -- FOR 后边的t_stmt要与下边的 prepare后的变量一致,其类型为 statement.
    DECLARE t_cur CURSOR WITH RETURN FOR t_stmt;
 
    SET t_c = 'f';
    SET t_d = 'g';
    
    --这里可为insert 等任何sql语句.
    SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';
    
    PREPARE t_stmt FROM t_sql;
    
    OPEN t_cur
    --如果不需要使用变量,不用写USING XXX语句.
    USING t_c, t_d
    ;
END

(责任编辑:admin)
------分隔线----------------------------
列表分类
服务承诺
  • 免费检测,现场恢复
  • 不成功不收任何费用
  • 专业工程师提供服务
  • 与客户签订保密协议
  • 恢复前客户确定价格
  • 免费提供3天数据备份
  • 市区内免费上门取盘
  • 周六,周日不休息
  • 活动期享受优惠折扣
技术优势
  • 服务器上门检测恢复
  • 硬盘脱离服务器恢复
  • 不限制任何RAID级别
  • 不限制任何操作系统
  • 磁盘只读不写,安全
  • 可全程观看恢复过程
  • 远程恢复,绝对安全
  • 百级无尘开盘工作间
  • 自主数据恢复软件开发