为啥我们不能在 PL SQL 中一次获取多个值?

Posted

技术标签:

【中文标题】为啥我们不能在 PL SQL 中一次获取多个值?【英文标题】:Why we can not fetch more than one value at a time in PL SQL?为什么我们不能在 PL SQL 中一次获取多个值? 【发布时间】:2015-06-29 08:02:29 【问题描述】:

为什么我们不能在 PL SQL 中一次获取多个值?为什么需要光标?

【问题讨论】:

我不知道你在说什么。有几种方法可以在 PL/SQL 中获取数据。当然,您可以一次获取多个值。你的问题是没有意义的。 【参考方案1】:

我猜您要问的是如何一次获取多行(但您可以更详细地提出问题)。这可以通过将批量收集到集合中来完成。这是一个例子:

PROCEDURE process_all_rows
IS
   TYPE employees_aat 
   IS TABLE OF employees%ROWTYPE
      INDEX BY PLS_INTEGER;
   l_employees employees_aat;
BEGIN
   SELECT *
   BULK COLLECT INTO l_employees
      FROM employees;

   FOR indx IN 1 .. l_employees.COUNT 
   LOOP
       analyze_compensation 
      (l_employees(indx));
   END LOOP;
END process_all_rows;

来自这篇文章http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html

【讨论】:

是的。我在问如何一次获取多行。我应该清楚地描述它。我们可以使用 for 循环并且不使用游标提取表的所有行吗? 如上所述,您可以将所有内容提取到集合中 - 批量收集。不过,如果您可能有大量行,我不建议您这样做。您可以在此处找到描述(一次更多行,更快但使用更多内存)oracle.com/technetwork/issue-archive/2008/08-mar/…【参考方案2】:

为什么我们不能在 PL SQL 中一次获取多个值?

是的,你可以。

SQL> set serveroutput on
SQL> DECLARE
  2  v_empno NUMBER;
  3  v_sal NUMBER;
  4  BEGIN
  5  SELECT empno, sal into v_empno, v_sal FROM emp WHERE ename='SCOTT';
  6  dbms_output.put_line('1st value Empno is = '||v_empno||' , 2nd value sal is = '||v_Sal);
  7  END;
  8  /
1st value Empno is = 7788 , 2nd value sal is = 3000

PL/SQL procedure successfully completed.

SQL>

为什么需要光标?

除非您缩小到具体细节,否则这个问题太宽泛,无法回答。此外,您似乎对 valuesrows 感到困惑。在上面的示例中,在 PL/SQL 块中,它使用 INTO 子句返回两个值,但是,它是单行。

【讨论】:

以上是关于为啥我们不能在 PL SQL 中一次获取多个值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 PL/SQL 中的 for 循环没有打印出最后一次迭代

在 SQL 数据库中一次输入多个列表

为啥我们不需要在 pl sql 的 for 循环中打开和获取显式游标?

PL/SQL练习复合变量: 可以一次传递多个值到变量中。

如何在 Pandas DataFrame 中一次获取多列的值计数?

从 PL/SQL 函数返回多个值