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 将查询结果提取到过程中的游标中_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 将查询结果提取到过程中的游标中

Sql 将查询结果提取到过程中的游标中,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在将许多过程从MySQL迁移到oracle,我发现了一些问题。到目前为止,我得到的是: CREATE OR REPLACE PROCEDURE PROCEDURE1(PROCEDURE_PARAM IN NUMBER) IS CURSOR C1 (CURSOR_PARAMETER IN NUMBER) IS SELECT COL1, COL2, MY_FUNCTION1(P1), SUM(COL3), MY_FUNCTION2(P1,P2) COL4, MY_FUNCTIO

我正在将许多过程从MySQL迁移到oracle,我发现了一些问题。到目前为止,我得到的是:

CREATE OR REPLACE PROCEDURE PROCEDURE1(PROCEDURE_PARAM IN NUMBER)
IS
CURSOR C1 (CURSOR_PARAMETER IN NUMBER)
IS
 SELECT COL1, COL2, MY_FUNCTION1(P1), SUM(COL3), MY_FUNCTION2(P1,P2)
        COL4, MY_FUNCTION(P1,P2,P3,P4)
 FROM TABLE_1
 WHERE COL1 = CURSOR_PARAMETER -- How to reference it to 'Procedure_param' ?
 GROUP BY COL1, COL2, COL4
 ORDER BY COL2;

BEGIN
    -- HOW TO FETCH RESULTS INTO CURSOR ??
END PROCEDURE1;
/
这些是名称列和函数(用户创建的函数)的示例。我关心的是如何告诉游标参数
cursor\u parameter
PROCEDURE\u PARAM
相同,最重要的是如何将结果提取到游标中? 我陷入了这个问题。任何帮助都将不胜感激。通过这个例子,我可以开始转换所有必须转换的过程


致以最诚挚的问候。

您可以从光标处获取如下信息:

BEGIN
  for r_row in C1(PROCEDURE_PARAM)
  loop
    dbms_output.put_line(r_row.col1);--or whatever you want to do here.
  end loop;
end;
虽然我通常更喜欢将这些内联编写为

begin
  for r_row in (SELECT COL1, COL2, MY_FUNCTION1(P1), 
                       SUM(COL3), MY_FUNCTION2(P1,P2)
                       COL4, MY_FUNCTION(P1,P2,P3,P4)
                  FROM TABLE_1
                 WHERE COL1 = PROCEDURE_PARAM 
                 GROUP BY COL1, COL2, COL4
                 ORDER BY COL2)
  loop
    ...
  end loop;

这样我就不必向上滚动到光标def来查看它实际在做什么。

谢谢您的回答。还有一个问题。如何“返回”(我知道这是一个过程而不是函数)获取的游标。在循环语句和结束循环语句之间我应该怎么做?@AlejandroBastidas a
游标
是不可返回的,它们只设计用于在其中打开的程序单元内使用。要返回结果集,必须使用ref游标。请参阅:然后可以将其作为过程中的OUT参数或函数返回