动态 SQL 中的除法运算符(正斜杠) - PL/SQL 等价物
Division operator (forward slash) in a dynamic SQL - PL/SQL equivalent needed
我需要编写一个动态的 SQL,我可以在 SQL 服务器上轻松实现它,但很难在 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。
你错过了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;
我需要编写一个动态的 SQL,我可以在 SQL 服务器上轻松实现它,但很难在 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。
你错过了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;