Sql server 如何使用带变量的PL/SQL存储过程

Sql server 如何使用带变量的PL/SQL存储过程,sql-server,oracle,stored-procedures,plsql,Sql Server,Oracle,Stored Procedures,Plsql,我以前使用过SQL Server,现在我不得不用PL/SQL完成一些任务,在我看来Oracle完全不符合逻辑,我找不到任何合适的、用户友好的文档 如何在SQL Server中编写与此类似的存储过程: create procedure test( @x int ) as begin select * from table where id = @x end 如果可以,请解释pl/sql脚本背后的逻辑。谢谢。您的PL\SQL过程看起来像 create procedure test(x IN N

我以前使用过SQL Server,现在我不得不用PL/SQL完成一些任务,在我看来Oracle完全不符合逻辑,我找不到任何合适的、用户友好的文档

如何在SQL Server中编写与此类似的存储过程:

create procedure test(
@x   int
)
as
begin
select * from table where id = @x
end

如果可以,请解释pl/sql脚本背后的逻辑。谢谢。

您的PL\SQL过程看起来像

create procedure test(x IN NUMBER)
IS
begin
   select * from table where id = x;
end;
您需要声明一个行变量来存储所选内容。这个程序目前毫无意义。你是想返回光标还是什么

编辑:我会使用这样一个函数来完成你的要求

CREATE OR REPLACE FUNCTION test (x NUMBER) RETURN TABLE%ROWTYPE AS
var_table_row TABLE%ROWTYPE;
BEGIN
select * 
into var_table_row
from table where id = x;
RETURN var_table_row;
END;
像这样调用函数

Declare
var_row  TABLE%ROWTYPE;
BEGIN
var_row := test(2);  --passes two, returns a row.  Use row like var_row.id
END;

没有。有一个简单的表,id列。我只想将id传递给SP,以便返回该行。我编辑了我的帖子,以帮助您完成调用函数后的用例,它只返回成功完成的PL/SQL过程。没有结果集,即使有这样一个id的条目。原因是什么?如果不执行dbms_output.put_lineto_charvar_row.columnname;或者类似的东西。您还可以调试并停止该行,以验证您是否正在使用toad或sqldeveloper之类的东西。如果它没有真正找到任何东西,它会抛出一个没有找到的数据exception@Sher这并不复杂,但不同。您可以直接使用select语句。若您从c或java调用它,那个么就调用ExecuteQuery。在pl/sql中,可以打开游标。这很容易,但你应该从头开始。先读再判断。在数据量为TB、行数为百万的数据库中使用它,然后告诉我们该数据库是否可以作为前导。返回错误:Error4,4:PL/SQL:SQL语句被忽略,Error4,57:PL/SQL:ORA-00933:SQL命令未正确结束,Error5,3:PLS-00103:在预期以下情况之一时遇到文件结尾符号:;您可以从了解您是Oracle的新手开始,这个问题仍然太模糊。因此,这不是一个操作网站。正如建议的那样,您应该从文档开始@JDro04已经提供了一个非常基本的Oracle存储过程模型模板。。。你怎么了?
Declare
var_row  TABLE%ROWTYPE;
BEGIN
var_row := test(2);  --passes two, returns a row.  Use row like var_row.id
END;