0

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

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

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 ();

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

4

1 回答 1

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,但在第一行或第三行中不需要。

于 2013-04-10T22:06:01.753 回答