oracle与sqlserver比较

一:Oracle与Sql Server的访问上有很大不同:
         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)

二:存储过程例子
    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; 

转载于:https://www.cnblogs.com/leup/archive/2007/11/08/953416.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值