带SELECT的复杂过程

时间:2013-04-10 21:49:20

标签: sql oracle plsql oracle11g

我必须创建一个返回select查询结果的过程(我知道一个简单的视图更好,但这是一个练习所以...我必须^^“)

我做了这个程序,但那并不完美:

CREATE OR REPLACE PROCEDURE NbMoyenSession
IS
t1.nbSession t1.nbSession%TYPE;
t2.nbSessionCount t2.nbSession%TYPE;
BEGIN
--DECLARE nbSession Int;
SELECT t1.numsession, count(t2.numsession) INTO nbSession, nbSessionCount FROM table1 t1, table2 t2 WHERE t1.numsession = t2.numsession Group By t1.numsession;
dbms_output.put_line('test: ' ||t1.nbSession);
END;

EXECUTE PROCEDURE NbMoyenSession ();

我真的迷失在这个练习中,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

你遇到了麻烦,因为你在两个标量变量中选择了多行。最快的方法是使用SYS_REFCURSOR

CREATE OR REPLACE PROCEDURE NbMoyenSession(NbSession OUT SYS_REFCURSOR)
IS
BEGIN
  OPEN NbSession FOR
    SELECT t1.numsession, count(t2.numsession)
       FROM table1 t1, table2 t2
       WHERE t1.numsession = t2.numsession
       GROUP BY t1.numsession;
END;

要在SQL * Plus中测试它,只需执行以下操作:

SQL> VARIABLE testCur REFCURSOR
SQL> EXEC NbMoyenSession :testCur
SQL> PRINT testCur

您需要在上面第二行中:之前的冒号(testCur),但不需要在第一行或第三行中。{/ p>