加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将数据数组作为输入参数传递给Oracle过程

发布时间:2020-12-12 14:07:03 所属栏目:百科 来源:网络整理
导读:我试图传递一个(varchar)数据到Oracle过程的数组。 Oracle过程将从SQL * Plus或其他PL / SQL过程中调用,如下所示: BEGIN pr_perform_task('1','2','3','4');END; pr_perform_task将读取每个输入参数并执行任务。 我不知道如何我可以实现这一点。我第一个想
我试图传递一个(varchar)数据到Oracle过程的数组。 Oracle过程将从SQL * Plus或其他PL / SQL过程中调用,如下所示:
BEGIN
 pr_perform_task('1','2','3','4');
END;

pr_perform_task将读取每个输入参数并执行任务。

我不知道如何我可以实现这一点。我第一个想法是使用类型varray的输入参数,但我得到错误:PLS-00201:标识符’VARRAY’必须声明错误,当过程定义看起来像这样:

创建或更换过程PR_DELETE_RECORD_VARRAY(P_ID VARRAY)IS

总而言之,如何将数据作为数组传递,让SP循环遍历每个参数并执行任务?

我使用Oracle 10gR2作为我的数据库。

这是一种方法:
SQL> set serveroutput on
SQL> CREATE OR REPLACE TYPE MyType AS VARRAY(200) OF VARCHAR2(50);
  2  /

Type created

SQL> CREATE OR REPLACE PROCEDURE testing (t_in MyType) IS
  2  BEGIN
  3    FOR i IN 1..t_in.count LOOP
  4      dbms_output.put_line(t_in(i));
  5    END LOOP;
  6  END;
  7  /

Procedure created

SQL> DECLARE
  2    v_t MyType;
  3  BEGIN
  4    v_t := MyType();
  5    v_t.EXTEND(10);
  6    v_t(1) := 'this is a test';
  7    v_t(2) := 'A second test line';
  8    testing(v_t);
  9  END;
 10  /

this is a test
A second test line

要扩展我对@ dcp的回答的评论,下面是如何实现提出的解决方案,如果你想使用关联数组:

SQL> CREATE OR REPLACE PACKAGE p IS
  2    TYPE p_type IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
  3  
  4    PROCEDURE pp (inp p_type);
  5  END p;
  6  /

Package created
SQL> CREATE OR REPLACE PACKAGE BODY p IS
  2    PROCEDURE pp (inp p_type) IS
  3    BEGIN
  4      FOR i IN 1..inp.count LOOP
  5        dbms_output.put_line(inp(i));
  6      END LOOP;
  7    END pp;
  8  END p;
  9  /

Package body created
SQL> DECLARE
  2    v_t p.p_type;
  3  BEGIN
  4    v_t(1) := 'this is a test of p';
  5    v_t(2) := 'A second test line for p';
  6    p.pp(v_t);
  7  END;
  8  /

this is a test of p
A second test line for p

PL/SQL procedure successfully completed

SQL>

这种交易创建一个独立的Oracle TYPE(不能是一个关联数组),要求定义一个可以被所有人看到的包,以便它定义的TYPE可以被所有人使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读