动态SQL中的除法运算符(正斜杠)-需要PL / SQL等效项

时间:2019-03-14 15:15:11

标签: sql oracle dynamic-sql

我需要编写一个动态SQL,我能够轻松地在SQL Server中对其进行处理,但是却难以在Oracle中获得与之等效的效果。

--SQL Server 
Declare @SQLString nvarchar(200)
SET @SQLString = 'SELECT 20/2'
EXECUTE (@SQLString)

--Oracle equivalent
Declare SQLString NVARCHAR2(4000);
--SQLString := 'Select 20' || '/' || '2 from dual'; --does not work
SQLString := 'SELECT 20/2 FROM dual';   --does not work
EXECUTE IMMEDIATE SQLString;

我所有的搜索都导致使用/来缓冲,或者不是很有帮助。 我不知道如何将除法运算符(正斜杠)连接起来以在Oracle中形成动态SQL。

1 个答案:

答案 0 :(得分:1)

您缺少BEGIN END;另外,Nvarchar2不适合execute immediate,您需要varchar2

这有效

declare
    SQLString   varchar2(4000);
begin    
    SQLString := 'select 20/2 from dual';
    execute immediate SQLString;
end;

但是什么也不做;这是处理查询结果的提示:

declare
    SQLString   varchar2(4000);
    vResult     number;
begin    
    SQLString := 'select 20/2 from dual';
    execute immediate SQLString into vResult;
    dbms_output.put_line('RESULT: ' || vResult);
end;

我认为这是一些练习或示例代码,因为在这里我看不到使用动态SQL的任何理由。这样做与以前的代码相同:

declare
    vResult     number;
begin    
    select 20/2 into vResult from dual;
    dbms_output.put_line('RESULT: ' || vResult);
end;