ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【笔记】9i 文档中的一个问题

【笔记】9i 文档中的一个问题

原创 Linux操作系统 作者:yellowlee 时间:2009-03-31 16:02:06 0 删除 编辑

9i pl/sql reference上有一个例子,querying data into collections of records,但是却有几处错误。jackywood告诉说:index by 用法有误,用了index by 后面的

num_tab  NumTabTyp := NumTabTyp(2, 5, 8, 9);
  char_tab CharTabTyp := CharTabTyp('Tim', 'Jon', 'Beth', 'Jenny');
初始化会报错。修改后,仍然报错,提示

UPDATE tab1 SET (col1, col2) = rec_tab(i) WHERE col1 < 8;
update ...set 表达式必须是子查询,百思不得其解,按照oracle文档说法,这样update应该是可以被接受的。。

一下是相关的代码:

DECLARE
  /*
  create TABLE tab1 (col1 NUMBER, col2 VARCHAR2(20));
 
  CREATE TABLE tab2 (col1 NUMBER, col2 VARCHAR2(20));
 
  */
  TYPE RecTabTyp IS TABLE OF tab1%ROWTYPE INDEX BY BINARY_INTEGER;
  TYPE NumTabTyp IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
  TYPE CharTabTyp IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
  CURSOR c1 IS
    SELECT col1, col2 FROM tab2;
  rec_tab  RecTabTyp;
  num_tab  NumTabTyp := NumTabTyp(2, 5, 8, 9);
  char_tab CharTabTyp := CharTabTyp('Tim', 'Jon', 'Beth', 'Jenny');
BEGIN
  FORALL i IN 1 .. 4
    INSERT INTO tab1 VALUES (num_tab(i), char_tab(i));
  SELECT col1, col2 BULK COLLECT INTO rec_tab FROM tab1 WHERE col1 < 9;
  FORALL i IN rec_tab.FIRST .. rec_tab.LAST
    INSERT INTO tab2 VALUES rec_tab (i);
  FOR i IN rec_tab.FIRST .. rec_tab.LAST LOOP
    rec_tab(i).col1 := rec_tab(i).col1 + 100;
  END LOOP;

  FORALL i IN rec_tab.FIRST .. rec_tab.LAST
    UPDATE tab1 SET (col1, col2) = rec_tab(i) WHERE col1 < 8;
  OPEN c1;
  FETCH c1 BULK COLLECT
    INTO rec_tab;
  CLOSE c1;
END;

 

文档中定义的格式为:

SELECT select_items BULK COLLECT
  INTO record_variable_name
  FROM rest_of_select_stmt FETCH { cursor_name | cursor_variable_name | :host_cursor_variable_name} BULK COLLECT
  INTO record_variable_name LIMIT numeric_expression;
FORALL index IN lower_bound .. upper_bound
  INSERT INTO { table_reference | THE_subquery} {column_name, column_name .. .}
  VALUES
    (record_variable_name(index))
     rest_of_insert_stmt
    FORALL index IN lower_bound .. upper_bound
    UPDATE {table_reference | THE_subquery} alias SET
    (column_name, column_name.. .) = record_variable_name
    (index) rest_of_update_stmt
  RETURNING row_expression, row_expression .. .
  BULK COLLECT INTO record_variable_name;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16179598/viewspace-582475/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-12-27

  • 博文量
    316
  • 访问量
    658558