Sql 过程如何使用 IN OUT 返回多个值:PLS-00103 错误
Posted
技术标签:
【中文标题】Sql 过程如何使用 IN OUT 返回多个值:PLS-00103 错误【英文标题】:How Sql Procedure return mulltiple values with IN OUT :PLS-00103 error 【发布时间】:2016-01-14 08:51:40 【问题描述】:我正在使用 oracle 10g 我想创建一个返回多个值的 sql 过程我在我的过程中使用 IN OUT
create or replace procedure proc_mull_val
(
e_id in chr_emgt_employee.employee_code%type,
head_id out chr_emgt_employee.employee_code%type,
zone_id out chr_emgt_employee.employee_code%type
)
is
begin
SELECT (SELECT employee_code
FROM chr_emgt_employee
WHERE EMPLOYEE_ID = emgt1.SUPERVISOR_EMP_ID)
, (SELECT employee_code
FROM chr_emgt_employee
WHERE employee_id = EMGT2.SUPERVISOR_EMP_ID)
INTO head_id,zone_id
FROM chr_emgt_employee emgt1, chr_emgt_employee emgt2
WHERE EMGT2.employee_id = emgt1.SUPERVISOR_EMP_ID
AND emgt1.employee_code = e_id;
end;
程序已成功创建,但是当我执行此程序时
declare
head_id chr_emgt_employee.employee_code%type;
zone_id chr_emgt_employee.employee_code%type;
begin
execute proc_mull_val(151018,head_id,zone_id);
end;
执行时遇到这个错误
PLS-00103:在预期以下情况之一时遇到符号“PROC_MULL_VAL”: := 。 (@%;立即 符号“:=”被替换为“PROC_MULL_VAL”以继续。
如果有人对此查询或我的问题有更好的建议,请告诉我
【问题讨论】:
删除调用过程中的execute
。此外,您的程序似乎在变量中插入了许多值;如果需要的话,最好考虑BULK COLLECT
和数据结构
是的,我的程序在变量中插入了一个子查询。但我很抱歉我没有让你批量收集那是什么
因此,如果您的查询之一可以返回多个值,则不能使用单个变量。尝试类似:DECLARE TYPE t_tab IS TABLE OF NUMBER; tab t_tab; BEGIN SELECT LEVEL BULK COLLECT INTO tab FROM DUAL CONNECT BY LEVEL < 3; for i in tab.first .. tab.last loop DBMS_OUTPUT.put_line('Size: ' || tab(i)); end loop; END; /
您的意思是多个值,就像两个 OUT 参数中的每一个中的单个标量值一样,因此您可以从对过程的调用中获得每个值;或者您想从一次调用中检索多个 head_id 和/或多个 zone_id 值?
【参考方案1】:
我认为你的程序没有问题,只是你的调用方式发生了变化
DECLARE
head_id varchar2 (20);
zone_id varchar2 (20);
BEGIN
proc_mull_val ('151018', head_id, zone_id);
DBMS_OUTPUT.put_line (head_id || '..... ' || zone_id);
END;
试试这个,如果不能解决,请告诉我更改数据类型,然后重试
【讨论】:
谢谢你非常接近问题是数据类型我是大傻瓜对不起,谢谢你的耐心【参考方案2】:Execute 是一个SQL*PLUS comand,因此您不能在 pl/sql 匿名块中使用它。
【讨论】:
【参考方案3】:首先在您的数据库中创建集合对象。并将该集合对象用作输出参数。 参考Passing an array of data as an input parameter to an Oracle procedure
【讨论】:
以上是关于Sql 过程如何使用 IN OUT 返回多个值:PLS-00103 错误的主要内容,如果未能解决你的问题,请参考以下文章