Oracle 中 select * 变量的简单使用

Simple use of variable with select * in Oracle

我很了解 MSSQL。但是在 Oracle 中尝试 SQL 的一些基本内容时,我遇到了麻烦。试图在其他网站上搜索但没有找到合适的+简单的例子。 假设我有 SQL 语句如下

Declare @mID int = 45
Select * from MyTable where id= @mID

我尝试在 Oracle(SQL 开发人员)中编写相同的代码。但是没有用。

Declare 
mID number := 45
Begin
Select * from MyTable where id= mID
End;

实际上,我尝试了更多语句但没有执行。我得到的只是错误。 谁能想出简单正确的解决方案?

你不知道SQL,你知道MSSQL :)

简单而正确的解决方案取决于您想要得到什么。您要 return 记录集给客户端吗?或者在下一个服务器语句中使用它?还是别的?

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;

Oracle 在 SQL 中没有变量,仅在 PL/SQL 中。与一切都是 "T-SQL" 的 SQL 服务器不同,Oracle 明确区分了 SQL 和(过程)PL/SQL.

SQL 语句中的变量必须由 SQL 客户端 完成(支持),而不是服务器。

SQL 开发人员支持(客户端)变量的方式与 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 所以我不知道这是否也记录在手册中)