赋值:  oracle格式:       变量 := 表达式;
        sql server格式:  set 变量 =  表达式;   OR select 变量 =  表达式
:)

解决方案 »

  1.   

    oracale select column into var from .....sql var = select column from ...
      

  2.   

    数字转换Oracle的TO_CHAR函数可以把n位NUMBER数据类型转换为VARCHAR2 数据类型,同时采用可选的数字格式。SQL Server则通过STR函数返回数字转换之后的字符数据。不过,该函数不具方便的Format参数。Oracle查询如下:
    SELECT to_char(123.45 ,99999999999999) from tab
    SELECT to_char(EXPIRY_DATE,'DDMONYYYY') from tab以下是SQL Server版本的查询:
    SELECT STR(123.45, 14)
    SELECT STR(round(123.455 , 2),12,2)
    SELECT CAST(REPLACE((CONVERT(varchar(12) , EXPIRYDATE, 106 )),' ' , '') as varchar(9))
    LENGTH和LEN以下是Oracle的查询:
    SELECT LENGTH('SQLMAG') "Length in characters" FROM DUAL;以上查询在SQL Server下是这样写的:
    SELECT LEN('SQLMAG') "Length in characters"
    日期以上两种系统都具有各自的当前日期和时间格式。Oracle取得日期和采用如下方式:
    SYSDATESQL Server则是这样的:
    GETDATE()你可以用各种语法操作日期。以下的代码对Oracle日期值中的月份进行了格式调整(返回日期再加上n月):
    Select   add_months(sysdate,12) from dualSQL Server则是如下完成同等功能的:
    Select dateadd(mm,12,getdate())数据的减法也不同。以下代码在Oracle中直接对数据进行减法操作:
    SELECT sysdate -add_months(sysdate,12) FROM dualSQL Server则是这样做的:
    SELECT  datediff(dd, GetDate(),dateadd(mm,12,getdate()))
      

  3.   

    外连接
       •MS SQL SERVER 支持两种形式表间连接
         ①从Sybase继承来的形式:
              字段1 *= 字段2 (左连接)
              字段1 =* 字段2 (右连接)
              没有这种形式的全外连接语法
         ②标准的外连接语法
              left [outer] join on 逻辑表达式
      right [outer] join on 逻辑表达式
              full [outer] join (全外连接) on 逻辑表达式
              这里的逻辑表达式 可以是很复杂的表达式例如 :A.ID=B.ID AND (A.Parebt_ID=1 OR A.Parent_ID=2)
         
         需要提醒大家的是:你写的查询语句报告过这样的错误 
    Joined tables cannot be specified in a query containing outer join operators. Joined tables cannot be specified in a query containing outer join operators. View or function 'dbo.VU_CAF_BILLS' contains joined tables
          这句话告诉你,你查询语句引用的视图或者子查询也用到了外连接,但是引用视图或者子查询外连接语法与你的外连接语法不一直导致的
    例如:select A.[ZONE],A.FLAG,A.FlagDesc,A.CAF_NO
    from dbo.VU_CAF_BILLS A,TU_Flag
    where A.CAF_NO*=TU_Flag.ObjNo
    视图dbo.VU_CAF_BILLS的外连接语法是标准的SQL语法,而本语句中的外连接语法却是Sybase式的外连接语法。   •Oracle不支持标准的外连接语法,也没有全外连接,这是它的缺陷
    字段1 = 字段2(+) (左连接)
            字段1(+) = 字段2 (右连接)   •使用外连接语句的用处
         ①不想因为表连接而使主表数据行丢失,这一点毋庸多说
         ①找某条记录在A表存在,而在B表不存在,按常规做法使用not in (select 查询子句)语法,
           使用not in 最大的缺点速度慢,原因是每个数据行都去做:select 查询子句
           而使用下面的语法:
    select TU_COMPANY.*
    from TU_COMPANY left join TU_Comp_Agent on TU_COMPANY.ID=TU_Comp_Agent.CompCode
    where TU_Comp_Agent.Id is null
    、表数据复制
        •库内数据复制
    •MS SQL Server 
              Insert into 复制表名称 select 语句 (复制表已经存在)
      select 字段列表 into 复制表名称 from 表   (复制表不存在)
    •Oracle
              Insert into 复制表名称 select 语句 (复制表已经存在)
      create table 复制表名称 as select 语句   (复制表不存在)

        •文本文件转入、转出的批量处理
            •MS SQL Server 
              BCP命令行程序
            •Oracle
      SQLLDR命令行程序
      

  4.   

    多表更新、删除
        一条更新语句是不能更新多张表的,除非使用触发器隐含更新,我这里说的意思是:根据其他表数据更新你要更新的表
        一般形式:
        •MS SQL Server 
    update A
    SET 字段1=B表字段表达式,
        字段2=B表字段表达式
            from B 
            WHERE 逻辑表达式
         •Oracle
    update A
    SET 字段1=(select 字段表达式 from B WHERE ...),
        字段2=(select 字段表达式 from B WHERE ...)
            WHERE 逻辑表达式

          从以上来看,感觉oracle没有ms sql好,主要原因:假如A需要多个字段更新,MS_SQL语句更简练
    动态执行SQL语句
     •MS SQL SERVER 7.0好象没有这个功能,MS SQL SERVER 2000已经这个功能。
      你是不是想在存储过程的参数中传递一个表名或者在过程体里动态
      生成一个SQL语句,你会发现很难办到。看了下面的例子:你以前的问题全解决了
      declare @count int
      declare @SQL nvarchar(200)
      set @SQL = N'select count(*) from sysobjects'
      exec sp_executesql @SQL,N'@i int output',@count output
     
     
    •Oracle提供了两种方法实现这个功能
      ①程序包DBMS_SQL,执行一个语句的过程:
       打开游标(open_cursor,对于非查询语句,无此过程)
       分析语句(Parse)
       绑定变量(bind_variable)
       执行语句(execute)
       关闭游标(close_cursor,对于非查询语句,无此过程)
      ②execute immediate ls_SQL
      

  5.   

    一定要很清楚两者的区别吗?一个是T-SQL,一个是PL/SQL
      

  6.   

    SQL:
    iif(exp , value,value)ora:
    decode(exp , value,exp , value)