将数据数组作为输入参数传递给 Oracle 过程
我正在尝试将 (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
错误看起来像这样:
CREATE OR REPLACE PROCEDURE PR_DELETE_RECORD_VARRAY(P_ID VARRAY) IS
总而言之,如何将数据作为数组传递,让 SP 循环遍历每个参数并执行任务?
我使用 Oracle 10gR2 作为我的数据库。
I'm trying to pass an array of (varchar
) data into an Oracle procedure. The Oracle procedure would be either called from SQL*Plus or from another PL/SQL procedure like so:
BEGIN
pr_perform_task('1','2','3','4');
END;
pr_perform_task
will read each of the input parameters and perform the tasks.
I'm not sure as to how I can achieve this. My first thought was to use an input parameter of type varray
but I'm getting Error: PLS-00201: identifier 'VARRAY' must be declared
error, when the procedure definiton looks like this:
CREATE OR REPLACE PROCEDURE PR_DELETE_RECORD_VARRAY(P_ID VARRAY) IS
To summarize, how can I pass the data as an array, let the SP loop through each of the parameters and perform the task ?
I'm using Oracle 10gR2 as my database.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一种方法:
为了扩展我对 @dcp 答案的评论,如果您想使用关联数组,您可以通过以下方式实现那里提出的解决方案:
这需要创建一个独立的 Oracle 类型(不能是关联数组) )并要求定义一个所有人都可以看到的包,以便所有人都可以使用它定义的 TYPE。
This is one way to do it:
To expand on my comment to @dcp's answer, here's how you could implement the solution proposed there if you wanted to use an associative array:
This trades creating a standalone Oracle TYPE (which cannot be an associative array) with requiring the definition of a package that can be seen by all in order that the TYPE it defines there can be used by all.
如果参数的类型全部相同(例如
varchar2
),您可以有一个像这样的包,它将执行以下操作:然后,要调用它,您需要设置数组并通过它:
If the types of the parameters are all the same (
varchar2
for example), you can have a package like this which will do the following:Then, to call it you'd need to set up the array and pass it:
您可能喜欢:
创建表类型。用户执行以下命令
创建过程:
调用过程:
<前><代码>声明
vList StringListType := StringListType('1', '2', '3');
开始
PR_DELETE_RECORD_VARRAY(pList => vList);
结尾;
/
You may user like:
Create table types. user below command
Create Procedure:
Call the procedure: