将数据数组作为输入参数传递给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可以被所有人使用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |