java—我有一个pl/sql过程,不是返回2个输出,而是以数组的形式返回1个输出有人能指导我怎么做吗

ldioqlga  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(313)

我有一个pl/sql过程,不是返回2个输出,而是以数组的形式返回1个输出。有人能指导我怎么做吗

Create or replace procedure schoolstudents(
        LS1 OUT NUMBER,
        LS2 OUT NUMBER,
        tablename in VARCHAR2)
    IS
     lname     VARCHAR2(128);
     schoolId  NUMBER;
     my_sql VARCHAR2(200);
    BEGIN
      lname := tablename;
      schoolId := function(lname);
      my_sql := 'Insert into sname values(''a'',''b'') RETURNING '||schoolId||', '||schoolId||' into :1, :2';
      EXECUTE IMMEDIATE my_sql RETURNING OUT LS1, LS2;

      COMMIT;
    END;
    /
rqqzpn5f

rqqzpn5f1#

我不懂你的密码,对我来说毫无意义。那里没有什么动态,所以-为什么要麻烦?
不管怎样,由于您的问题是如何返回集合,这里有一个选项:我没有您的表,所以我将在scott的表中插入虚拟行 DEPT 表并将部门号及其名称返回到集合中,并将其作为 OUT 参数。

SQL> create or replace type t_row as object (deptno number, dname varchar2(20));
  2  /

Type created.

SQL> create or replace type t_tab is table of t_row;
  2  /

Type created.

SQL> create or replace procedure p_test
  2    (par_out  out t_tab)
  3  as
  4    l_deptno number;
  5    l_dname  varchar2(20);
  6    l_out    t_tab := t_tab();
  7  begin
  8    -- do stuff here
  9    insert into dept (deptno, dname)
 10      values (-1, 'test')
 11      returning deptno, dname into l_deptno, l_dname;
 12
 13    l_out.extend;
 14    l_out(1) := t_row(l_deptno, l_dname);
 15    par_out  := l_out;
 16  end;
 17  /

Procedure created.

测试:
初始表内容:

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

运行程序;查看结果:

SQL> declare
  2    l_out t_tab;
  3  begin
  4    p_test(l_out);
  5    dbms_output.put_line('Result: ' || l_out(1).deptno ||', '|| l_out(1).dname);
  6  end;
  7  /
Result: -1, test

PL/SQL procedure successfully completed.

插入成功了吗?

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        -1 test

SQL>

是的,是的。

相关问题