Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 带有SELECT的complexe过程_Sql_Oracle_Plsql_Oracle11g - Fatal编程技术网

Sql 带有SELECT的complexe过程

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

我必须创建一个返回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 ();

我在这个练习中真的迷路了,有人能帮我吗?

您遇到了问题,因为您正在将多行选择为两个标量变量。完成此操作的最快方法是使用
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手册中查找管道函数。谢谢!这正是我想要的:)我更了解。谢谢!这正是我想要的:)我更了解。