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 所以我不知道这是否也记录在手册中)
我很了解 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 所以我不知道这是否也记录在手册中)