我必须创建一个返回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 ();
我真的迷失在这个练习中,有人可以帮助我吗?
答案 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>