Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql过程如何返回带有IN-OUT的多个值:PLS-00103错误_Sql_Oracle_Stored Procedures_Plsql - Fatal编程技术网

Sql过程如何返回带有IN-OUT的多个值:PLS-00103错误

Sql过程如何返回带有IN-OUT的多个值:PLS-00103错误,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我使用的是Oracle10g,我想创建一个sql过程,返回我在过程中使用的多个值 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 SELE

我使用的是Oracle10g,我想创建一个sql过程,返回我在过程中使用的多个值

    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\u MULL\u VAL”以继续。


如果有人对此查询或我的问题有更好的建议,请告诉我执行是一个,因此不能在pl/sql匿名块中使用。

执行是一个,因此不能在pl/sql匿名块中使用。

首先在数据库中创建集合对象。并将该集合对象用作out参数。
请参阅首先在数据库中创建集合对象。并将该集合对象用作out参数。
参考

我认为您的程序没有问题,只是您的呼叫方式有所改变

   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;

请尝试此操作,如果没有解决,请告诉我更改数据类型,然后重试

我认为您的过程没有问题,您的调用方式是更改

   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;

请尝试此操作,如果不解决,请告诉我更改数据类型,然后重试

删除调用过程中的
执行
。此外,您的过程似乎在变量中插入了许多值;如果需要,您最好考虑
批量收集
,数据结构是我的过程在变量中插入子查询。bu很抱歉,我没有让您批量收集这是什么,因此,如果您的一个查询可以返回多个值,您不能使用单个变量。请尝试以下操作:
声明类型t\u tab是数字表;tab t\u tab;开始选择级别BULK COLLECT INTO tab FROM DUAL CONNECT BY LEVEL<3;对于tab.first..tab.last循环DBMS_OUTPUT.put_行中的i('Size:'| | tab(i));end loop;end;/
您是指两个OUT参数中的每个参数中的单个标量值中的多个值,因此您可以从对过程的调用中分别获取一个值;还是希望从单个调用中检索多个head_id和/或多个zone_id值?请删除对过程的调用中的
execute
ure似乎在变量中插入了许多值;如果需要,最好考虑
批量收集
和数据结构。我的过程是在变量中插入子查询。但很抱歉,我没有让您批量收集。这是什么?因此,如果您的一个查询可以返回多个值,则不能使用单个变量。请尝试例如:
DECLARE TYPE t_tab是数字表;tab t_tab;开始选择级别BULK COLLECT INTO tab,从双连接按级别<3;对于tab.first..tab.last循环DBMS_OUTPUT.put_line('Size:'| tab(i))中的i;end loop;end;/
您是说两个OUT参数中的每个参数中的单个标量值都有多个值,因此您可以从对过程的调用中获得每个值中的一个值;还是希望从单个调用中检索多个head_id和/或多个zone_id值?谢谢您非常接近,问题在于数据类型i am big fool抱歉,t谢谢你的病人谢谢你非常接近问题在于数据类型我是个大傻瓜对不起,谢谢你的病人