Plsql 有人能解释一下dbms\u sql.number\u表吗

Plsql 有人能解释一下dbms\u sql.number\u表吗,plsql,oracle11g,oracle10g,Plsql,Oracle11g,Oracle10g,我试图搜索这个,但没有得到一个满意的答案,因此张贴在这里。在理解NUMBER\u TABLE之前,请有人解释一下更好地理解DBMS\u SQL本身。 (我这样做是为了学习!) 实际上是, TYPE number_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 所以,只允许数字 关于DBMS\u SQL如何工作的流程图!: 您感兴趣的区域位于绑定变量框中 p.S.纯粹的敲诈,还有更多的信件,来自对不起,你在问什么?用谷歌搜索这个词(第一个链接

我试图搜索这个,但没有得到一个满意的答案,因此张贴在这里。在理解
NUMBER\u TABLE
之前,请有人解释一下更好地理解
DBMS\u SQL
本身。
(我这样做是为了学习!)

实际上是,

TYPE number_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
所以,只允许数字

关于DBMS\u SQL如何工作的流程图!:

您感兴趣的区域位于绑定变量框中



p.S.纯粹的敲诈,还有更多的信件,来自

对不起,你在问什么?用谷歌搜索这个词(第一个链接)可以得到一整页的信息这也可能有帮助(如果没有意义,那么是时候好好读书了)“Oracle允许您编写使用动态SQL的存储过程和匿名PL/SQL块。动态SQL语句没有嵌入到源程序中;相反,它们存储在字符串中,这些字符串在运行时输入程序或由程序生成。这使您能够创建更多的通用过程。“@robnick我只需要一个清晰的好例子。”@AsfakulIslam-您了解PL/SQL集合的基础知识吗
dbms\u sql.number\u table
只是在
dbms\u sql
包中定义的一个集合。它与您可以在自己的包中声明的集合没有什么不同。@JustinCave它只是用来保存数字的吗?@AsfakulIslam-是的,它是数字的集合。更具体地说,是数字的关联数组。
TYPE number_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
--                    | open_cursor |
--                      -----------
--                           |
--                           |
--                           v
--                         -----
--          ------------>| parse |
--          |              -----
--          |                |
--          |                | ---------
--          |                v          |
--          |           --------------  |
--          |-------->| bind_variable | |
--          |     ^     -------------   |
--          |     |           |         |
--          |      -----------|         |
--          |                 |<--------
--          |                 v
--          |               query?---------- yes ---------
--          |                 |                           |
--          |                no                           |
--          |                 |                           |
--          |                 v                           v
--          |              -------                  -------------
--          |----------->| execute |            ->| define_column |
--          |              -------             |    -------------
--          |                 |------------    |          |
--          |                 |            |    ----------|
--          |                 v            |              v
--          |           --------------     |           -------
--          |       ->| variable_value |   |  ------>| execute |
--          |      |    --------------     | |         -------
--          |      |          |            | |            |
--          |       ----------|            | |            |
--          |                 |            | |            v
--          |                 |            | |        ----------
--          |                 |<-----------  |----->| fetch_rows |
--          |                 |              |        ----------
--          |                 |              |            |
--          |                 |              |            v
--          |                 |              |  -----------------
--          |                 |              | | column_value    |
--          |                 |              | | variable_value  |
--          |                 |              |  -----------------
--          |                 |              |            |
--          |                 |<--------------------------
--          |                 |
--           -----------------|
--                            |
--                            v
--                       ------------
--                     | close_cursor |
--      

             ------------
DECLARE
  stmt VARCHAR2(200);
  dept_no_array DBMS_SQL.NUMBER_TABLE;
  c NUMBER;
  dummy NUMBER;
begin
  dept_no_array(1) := 10; dept_no_array(2) := 20; /* Put some values into the array */
  dept_no_array(3) := 30; dept_no_array(4) := 40;
  dept_no_array(5) := 30; dept_no_array(6) := 40;
  stmt := 'delete from emp where deptno = :dept_array'; /* A Dynamic SQL String with a bind variable */
  c := DBMS_SQL.OPEN_CURSOR; /* Open a Cursor! */
  DBMS_SQL.PARSE(c, stmt, DBMS_SQL.NATIVE); /* Parse the Dynamic SQL , making it happen on the native database to which is connected! */

  DBMS_SQL.BIND_ARRAY(c, ':dept_array', dept_no_array, 1, 4);
  /* Bind only elements 1 through 4 to the cursor Happens 4 times */

  dummy := DBMS_SQL.EXECUTE(c);
  /* Execute the Query, and return number of rows deleted! */

  DBMS_SQL.CLOSE_CURSOR(c); 

  EXCEPTION WHEN OTHERS THEN
    IF DBMS_SQL.IS_OPEN(c) THEN
      DBMS_SQL.CLOSE_CURSOR(c);
    END IF;
    RAISE;
END;
/