oracle与sqlserver比较
一:Oracle与Sql Server的访问上有很大不同:
1、字段类型不同
2、存储过程有很大差异,Oracle不能直接返回记录集,需要通过一个 out 参数达到目的。在OracleType中有一个OracleType.Cursor 类型与之对应。 Oracle中的存储过程大部分都定义成Funcion, 有返回值。 在定义Command的参数集合时,需要增加一个"ReturnValue"的参数。
3、Oracle中的参数无需"@"符号
4、Oracle的Sql 语句中 在参数前面加冒号":", 而Sql Server 的Sql 在前面加"@"
二:存储过程例子
1.
1、字段类型不同
2、存储过程有很大差异,Oracle不能直接返回记录集,需要通过一个 out 参数达到目的。在OracleType中有一个OracleType.Cursor 类型与之对应。 Oracle中的存储过程大部分都定义成Funcion, 有返回值。 在定义Command的参数集合时,需要增加一个"ReturnValue"的参数。
3、Oracle中的参数无需"@"符号
4、Oracle的Sql 语句中 在参数前面加冒号":", 而Sql Server 的Sql 在前面加"@"
--Sql Server的Sql 语句
insert into Table (Column1,Column2) values (@Value1,@Value2)
--Oracel中的Sql 语句
Insert Into Table (Column1,Column2) values
(:Value1,:Value2)
insert into Table (Column1,Column2) values (@Value1,@Value2)
--Oracel中的Sql 语句
Insert Into Table (Column1,Column2) values
(:Value1,:Value2)
二:存储过程例子
1.
1
包的定义:
2
create or replace package myTest
3
is
4
type out_cur is ref cursor;
5
procedure writeCount(codeid in nvarchar2);
6
procedure testSandyInSert(codeid in nvarchar2,counts out number);
7
end myTest;
8
9
存储过程的定义:
10
create or replace package body myTest
11
is
12
procedure writeCount(codeid in nvarchar2)
13
is
14
m_count number;
15
begin m_count:=0;
16
select count(1) into m_count from code where code_id = codeid;
17
dbms_output.put_line('输入参数是'||codeid);
18
dbms_output.put_line('查询结果是'||m_count);
19
end;
20
procedure testSandyInSert(codeid in nvarchar2,counts out number)
21
is
22
m_cur out_cur;
23
m_code_sn nvarchar2(50);
24
m_code_id nvarchar2(50);
25
m_code_name nvarchar2(50);
26
m_insertstr nvarchar2(50);
27
m_for number:=0;
28
begin counts:=0;
29
open m_cur for select code_sn,code_id,code_name from code where code_id= codeid;
30
loop fetch m_cur into m_code_sn,m_code_id,m_code_name;
31
exit when m_cur %notfound;
32
case UPPER(m_code_sn) when 'SP_CTRL_L' then m_code_sn:='0';
33
when 'dld' then m_code_sn:='1';
34
else m_code_sn:='3';
35
end case;
36
if UPPER(m_code_sn) ='SP_CTRL_L' then dbms_output.put_line('条件成立执行,测试if语句的使用');
37
else dbms_output.put_line('条件不成立执行,测试if语句的使用');
38
end if;
39
m_insertstr:=''''||m_code_sn||''','''||m_code_id||''','''||m_code_name||'''';
40
begin execute immediate 'insert into sandytest(col1,col2,col3) values('||m_insertstr||')';
41
dbms_output.put_line('插入表成功!');
42
counts:=1;
43
exception when others then dbms_output.put_line('插入表失败!');
44
end;
45
end loop;
46
for m_for in 1..10 loop dbms_output.put_line('循环测试:'||m_for);
47
end loop;
48
close m_cur;
49
end;
50
end myTest;

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

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50
