Sql 带有SELECT的complexe过程
我必须创建一个返回select查询结果的过程(我知道使用简单视图更好,但这是一个练习,所以…我必须^^”) 我做了这个程序,但并不完美:Sql 带有SELECT的complexe过程,sql,oracle,plsql,oracle11g,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.nums
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 ();
我在这个练习中真的迷路了,有人能帮我吗?您遇到了问题,因为您正在将多行选择为两个标量变量。完成此操作的最快方法是使用
SYS\u 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之前需要冒号(
:
),但在第一行或第三行中不需要冒号。您遇到了问题,因为您要将多行选择到两个标量变量中。完成此操作的最快方法是使用SYS\u 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
之前使用冒号(:
),但不需要在第一行或第三行。在Oracle手册中查找管道函数。在Oracle手册中查找管道函数。谢谢!这正是我想要的:)我更了解。谢谢!这正是我想要的:)我更了解。