gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:37:57 29 4
gpt4 key购买 nike

我正在尝试将一组 (varchar) 数据传递到 Oracle 过程中。 Oracle 过程可以从 SQL*Plus 或另一个 PL/SQL 过程调用,如下所示:

BEGIN
pr_perform_task('1','2','3','4');
END;

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

我不确定如何才能实现这一目标。我的第一个想法是使用 varray 类型的输入参数,但当过程定义时,我收到 Error: PLS-00201:identifier 'VARRAY' must be statements 错误看起来像这样:

创建或替换过程 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。

关于oracle - 将数据数组作为输入参数传递给 Oracle 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com