Oracle中的多选择语句
我想在Oracle中编写一个简单的存储过程,其中包含多个select语句。我可以在SQL server中像这样做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
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条件下(或多或少)是可能的: