Sql 将查询结果提取到过程中的游标中
我正在将许多过程从MySQL迁移到oracle,我发现了一些问题。到目前为止,我得到的是: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
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参数或函数返回