【问题标题】:How to use PL/SQL stored procedure with variable如何使用带变量的 PL/SQL 存储过程
【发布时间】:2016-08-08 15:44:48
【问题描述】:

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

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

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

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

【问题讨论】:

标签: sql-server oracle stored-procedures plsql


【解决方案1】:
CREATE OR REPLACE PROCEDURE test (x NUMBER) AS
var_table_row TABLE%ROWTYPE;
BEGIN
select * 
into var_table_row
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_line(to_char(var_row.columnname); 或类似的操作,则不会显示任何内容。您也可以在该行进行调试并停止以验证您是否正在使用诸如 toad 或 sql developer 之类的东西。如果它实际上没有找到任何东西,它会抛出 NO_DATA_FOUND 异常
  • @Sher 并不复杂,但不同。您可以直接使用 select 语句。如果从 c# 或 java 调用它,则调用执行查询。在 pl/sql 中打开游标。这很容易,但你应该从头开始。先读后判断。在拥有数 TB 数据和数百万行的数据库中使用它,然后告诉我们这个数据库是否可以成为领导者。
【解决方案2】:

您的带有 PL\SQL 的 Proc 看起来像...

create procedure test(x IN NUMBER)
IS
begin
   select * from table where id = x;
end;

【讨论】:

  • 返回错误:错误(4,4):PL/SQL:SQL 语句被忽略,错误(4,57):PL/SQL:ORA-00933:SQL 命令未正确结束,错误( 5,3):PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:;
猜你喜欢
  • 2016-02-14
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2022-01-18
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多