我非常了解MSSQL。但是当在Oracle中尝试SQL的一些基本内容时,我遇到了麻烦。试图搜索其他网站,但没有找到合适的+简单的例子。 假设我有如下SQL语句
Declare @mID int = 45
Select * from MyTable where id= @mID
我尝试在Oracle(SQL Developer)中编写相同的代码。但它没有奏效。
Declare
mID number := 45
Begin
Select * from MyTable where id= mID
End;
实际上,我尝试了更多的陈述,但没有执行。我得到的只是错误。 任何人都可以想出简单的&正确的解决方案?
答案 0 :(得分:1)
Oracle在SQL中没有变量,仅在PL / SQL中。与SQL Server的所有内容都是“T-SQL”不同,Oracle明确区分了SQL和(程序)PL / SQL。
SQL 语句中的变量必须由 SQL客户端完成(支持),而不是服务器。
SQL Developer支持(客户端)变量的方式与SQL * Plus相同。
define mid = 45
Select *
from MyTable
where id= ∣
此处记录DEFINE
命令:
https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve017.htm#i2697507
(我通常不会使用SQL Developer,因此我不知道手册中是否也记录了这一点)
答案 1 :(得分:0)
你不懂SQL,你知道MS SQL:)
简单&正确的解决方案取决于你想要得到什么。您希望将记录集返回给客户吗?或者也许在下一个服务器语句中使用它?或其他什么?
MSSQL不支持(或者可能过去没有支持)查询参数,这么多年它将成为在MSSQL中进行参数化查询的方法 - 声明变量并将它们用于查询。 Oracle支持参数化查询,因此在这种情况下,您应该直接执行:
SELECT * FROM YourTable WHERE id = :id
客户端使用这种技术:
with TOraQuery.Create(nil) do
try
SQL.Text := 'SELECT * FROM YourTable WHERE id = :id';
ParamByName('id').AsInteger := 45;
Open;
...
ParamByName('id').AsInteger := 46;
Open;
...
ParamByName('id').AsInteger := 47;
Open;
finally
Free;
end;
Oracle并不支持会话变量,因此类似MSSQL的方式并不适用于此。最接近Oracle的方法是
declare
p_id YourTable.ID%type := 45;
begin
open :result for select * from YourTable where id = p_id;
end;