【问题标题】:Declare local variable: how convert this mssql script to oracle?声明局部变量:如何将此 mssql 脚本转换为 oracle?
【发布时间】:2012-02-29 08:01:42
【问题描述】:
declare @amount float
declare @result char (20)

select @amount = cost from PurchaseDoc where id = 1

if @amount > 0 set @result = 'ok'
else set @result = 'empty'

print @result

【问题讨论】:

    标签: sql-server oracle dbmigrate


    【解决方案1】:

    这是您的脚本的一种表示形式,可以针对 Oracle 数据库执行:

    DECLARE
        amount    NUMBER;
        result    varchar2(20);
    BEGIN
        SELECT SUM(cost) INTO amount
          from PurchaseDoc
         WHERE id = 1;
    
        if (amount > 0) 
        then
            result := 'ok';
        else 
            result := 'empty';      
        end if;
    
        dbms_output.put_line(result);    
    END;
    /
    

    有关 dbms_output 的一些有用信息,请参阅link
    我建议查看一些 PL/SQL 教程,例如位于 www.plsql-tutorial.com 的教程。

    编辑 根据 Cade Roux 的建议更新了 select 语句

    【讨论】:

    • 为简单起见,我会将其更改为 SUM(cost),因为如果不存在任何行,您将获得一个 NO_DATA_FOUND 异常,该异常需要在从 SQL 到 PL/SQL 的转换中进行处理(SELECT 是SQL, INTO 变量是 PL/SQL)。在 T-SQL 中没有这个问题,因为它们的集成度更高。
    【解决方案2】:

    这里真的不需要 PL/SQL,一个带有“解码”功能的普通 select 语句就可以解决问题。

    SELECT DECODE(SUM(COST),0,'empty','ok') FROM PurchaseDoc where id = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多