Oracle中的多选择语句

Oracle中的多选择语句,oracle,plsql,sqlplus,Oracle,Plsql,Sqlplus,我想在Oracle中编写一个简单的存储过程,其中包含多个select语句。我可以在SQL server中像这样做 Create proc spc_name as begin select * from tab1 Select * from tab2 ...... end 我想知道如何在Oracle中编写与我在SQL Server中编写的相同的等效存储过程或者,您可以为此使用游标。请查收 或者举个例子 可以在存储过程中声明多个游标 如果您想将结果从Oracle Stroed PRoc提取到Ja

我想在Oracle中编写一个简单的存储过程,其中包含多个select语句。我可以在SQL server中像这样做

Create proc spc_name
as
begin
select * from tab1

Select * from tab2
......
end

我想知道如何在Oracle中编写与我在SQL Server中编写的相同的等效存储过程

或者,您可以为此使用游标。请查收 或者举个例子

可以在存储过程中声明多个游标

如果您想将结果从Oracle Stroed PRoc提取到Java,您可能可以参考或

从选项卡1中选择*

从tab2中选择*

您不能在
PL/SQL
中简单地进行
select
查询。它将抛出
PLS-00428:此SELECT语句中应包含INTO子句
错误

要么使用
SELECT..INTO
子句,要么使用
CURSORS
。SELECTINTO子句用于检索一行或一组列。它用于将返回的数据存储到预定义的变量中。对于多个选择,您可以有多个
SELECT-INTO
子句,每个子句将存储各自SQL的结果

比如说,

SQL> DECLARE
  2    v_ename emp.ename%TYPE;
  3    v_empno emp.empno%TYPE;
  4  BEGIN
  5    SELECT ename INTO v_ename FROM emp WHERE empno = 7369;
  6    SELECT empno INTO v_empno FROM emp WHERE ename = 'SCOTT';
  7    dbms_output.put_line('SELECT statement 1 returns name =: '||v_ename);
  8    dbms_output.put_line('SELECT statement 2 returns emp number =: '||v_empno)
  9  END;
 10  /
SELECT statement 1 returns name =: SMITH
SELECT statement 2 returns emp number =: 7788

PL/SQL procedure successfully completed.

SQL>
SQL> variable v_ref1 refcursor
SQL> variable v_ref2 refcursor
SQL>
SQL> DECLARE
  2    v_ref1 sys_refcursor;
  3    v_ref2 sys_refcursor;
  4  BEGIN
  5    OPEN :v_ref1 FOR SELECT empno, ename
  6       FROM emp ORDER BY empno
  7    FETCH FIRST 5 ROWS ONLY;
  8    OPEN :v_ref2 FOR SELECT empno, ename
  9       FROM emp ORDER BY empno DESC
 10    FETCH FIRST 5 ROWS ONLY;
 11  END;
 12  /

PL/SQL procedure successfully completed.

SQL> print v_ref1

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN

SQL> print v_ref2

     EMPNO ENAME
---------- ----------
      7934 MILLER
      7902 FORD
      7900 JAMES
      7876 ADAMS
      7844 TURNER

SQL>
要返回多行,您可以使用
光标
。在您的情况下,对于多个语句,您可以有两个
REFCURSOR

比如说,

SQL> DECLARE
  2    v_ename emp.ename%TYPE;
  3    v_empno emp.empno%TYPE;
  4  BEGIN
  5    SELECT ename INTO v_ename FROM emp WHERE empno = 7369;
  6    SELECT empno INTO v_empno FROM emp WHERE ename = 'SCOTT';
  7    dbms_output.put_line('SELECT statement 1 returns name =: '||v_ename);
  8    dbms_output.put_line('SELECT statement 2 returns emp number =: '||v_empno)
  9  END;
 10  /
SELECT statement 1 returns name =: SMITH
SELECT statement 2 returns emp number =: 7788

PL/SQL procedure successfully completed.

SQL>
SQL> variable v_ref1 refcursor
SQL> variable v_ref2 refcursor
SQL>
SQL> DECLARE
  2    v_ref1 sys_refcursor;
  3    v_ref2 sys_refcursor;
  4  BEGIN
  5    OPEN :v_ref1 FOR SELECT empno, ename
  6       FROM emp ORDER BY empno
  7    FETCH FIRST 5 ROWS ONLY;
  8    OPEN :v_ref2 FOR SELECT empno, ename
  9       FROM emp ORDER BY empno DESC
 10    FETCH FIRST 5 ROWS ONLY;
 11  END;
 12  /

PL/SQL procedure successfully completed.

SQL> print v_ref1

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN

SQL> print v_ref2

     EMPNO ENAME
---------- ----------
      7934 MILLER
      7902 FORD
      7900 JAMES
      7876 ADAMS
      7844 TURNER

SQL>
如果要组合多个
SELECT
语句的结果集,可以使用
UNION
运算符并将其置于单个
REFCURSOR
中。假设列数据类型匹配且顺序正确。这只是一个例子

SQL> variable v_ref refcursor
SQL>
SQL> DECLARE
  2    v_ref sys_refcursor;
  3  BEGIN
  4    OPEN :v_ref FOR
  5      SELECT empno, DEPTNO FROM emp WHERE ROWNUM <=5
  6         UNION ALL
  7      SELECT empno, DEPTNO FROM EMP WHERE ROWNUM <=5;
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> print v_ref

     EMPNO     DEPTNO
---------- ----------
      7369         20
      7499         30
      7521         30
      7566         20
      7654         30
      7369         20
      7499         30
      7521         30
      7566         20
      7654         30

10 rows selected.

SQL>
SQL>变量v_ref cursor
SQL>
SQL>声明
2伏参考系统参考光标;
3开始
4打开:v_参考
5从emp中选择empno和DEPTNO,其中ROWNUM

在12c中,您实际上可以得到多个结果,如以下问题:您使用的是哪个Oracle版本?这在12c条件下(或多或少)是可能的: