将光标记录传递给函数

发布于 2024-12-14 19:14:54 字数 290 浏览 1 评论 0原文

我有一个存储过程。我想从中调用一个函数。想要将检索到的游标记录传递给函数。我如何将检索到的游标记录作为函数参数传递,以及如何在函数内部访问它?我如何声明该函数?

创建或替换过程服务__更新为

光标c_getData是
    选择 *
    来自服务_1
    其中状态=5;


开始
    dbms_output.enable(null);    

    for rec 在 c_getData 循环中

    函数(记录)

I have a stored procedure. I want to call a function from it. Want to pass the retrieved cursor record to the function. how can i pass the retrieved cursor record as function argument and how can i access it inside the function? How do i declare the function?

CREATE OR REPLACE PROCEDURE service__update as

cursor c_getData is
    select    *
    from  service_1
    where status=5    ;


begin
    dbms_output.enable(null);    

    for rec in c_getData loop

    function(rec)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浊酒尽余欢 2024-12-21 19:14:54

假设您确实想要一个函数(这意味着您想要返回一个值)而不是一个过程(它不返回值),并且假设您的光标确实从单个表中选择每一列,您可以声明一个函数需要一个锚定的 %ROWTYPE

SQL> create function get_empno( p_rec in emp%rowtype )
  2    return number
  3  is
  4  begin
  5    return p_rec.empno;
  6  end;
  7  /

Function created.

然后从您的过程中调用该函数

SQL> declare
  2    l_empno emp.empno%type;
  3  begin
  4    for i in (select * from emp)
  5    loop
  6      l_empno := get_empno( i );
  7      dbms_output.put_line( l_empno );
  8    end loop;
  9  end;
 10  /
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

PL/SQL procedure successfully completed.

Assuming that you really want a function (which implies that you want to return a value) rather than a procedure (which does not return a value) and assuming that your cursor really is selecting every column from a single table, you can declare a function that takes an anchored %ROWTYPE

SQL> create function get_empno( p_rec in emp%rowtype )
  2    return number
  3  is
  4  begin
  5    return p_rec.empno;
  6  end;
  7  /

Function created.

and then call that function from your procedure

SQL> declare
  2    l_empno emp.empno%type;
  3  begin
  4    for i in (select * from emp)
  5    loop
  6      l_empno := get_empno( i );
  7      dbms_output.put_line( l_empno );
  8    end loop;
  9  end;
 10  /
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

PL/SQL procedure successfully completed.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文