日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

集合變量的賦值

本文介紹了為集合變量賦值的方式。

簡(jiǎn)介

您可以通過以下方式為集合變量賦值:

  • 調(diào)用構(gòu)造函數(shù)來創(chuàng)建集合并將其分配給集合變量。

  • 使用賦值語句將另一個(gè)現(xiàn)有集合變量的值賦給它。

  • 將其作為OUTIN OUT參數(shù)傳遞給子程序,然后在子程序內(nèi)賦值。僅支持變長(zhǎng)數(shù)組和嵌套表作為子程序的參數(shù)。不允許關(guān)聯(lián)數(shù)組作為子程序的參數(shù)。

  • 使用collection(index) = value的形式為集合變量的元素賦值。

說明

僅當(dāng)兩個(gè)集合具有相同的或是可以隱式類型轉(zhuǎn)換的元素類型時(shí),才可以將它們互相賦值。

示例

以下是一個(gè)賦值成功的示例。

DECLARE
  TYPE char_col1 IS VARRAY(3) OF CHAR(5);
  TYPE char_col2 IS VARRAY(3) OF CHAR(5);
  TYPE int_col IS VARRAY(3) OF INT;
 
  group1 char_col1 := char_col1('1', '2', '3');
  group2 char_col2;
  group3 int_col;
BEGIN

  group2 := group1; -- 不同的集合類型, 但相同的元素類型
  RAISE NOTICE 'group2:';
  FOR i IN 1..3 LOOP
    RAISE NOTICE '%', group2(i);
  END LOOP;

  group3 := group1; -- 不同的集合類型, 但可以隱式轉(zhuǎn)換的元素類型
  RAISE NOTICE 'group3:';
  FOR i IN 1..3 LOOP
    RAISE NOTICE '%', group3(i);
  END LOOP;
END;

顯示結(jié)果如下:

NOTICE:  group2:
NOTICE:  1    
NOTICE:  2    
NOTICE:  3    
NOTICE:  group3:
NOTICE:  1
NOTICE:  2
NOTICE:  3
DO

當(dāng)隱式轉(zhuǎn)換失敗時(shí),則會(huì)在對(duì)應(yīng)的元素賦值時(shí)拋出錯(cuò)誤。以下是一個(gè)賦值失敗的示例。

DECLARE
  TYPE char_col IS VARRAY(3) OF CHAR(5);
  TYPE int_col IS VARRAY(3) OF INT;
 
  group1 char_col := char_col('1', 'a'); -- 顯然, a無法轉(zhuǎn)換為int類型
  group2 int_col;
BEGIN
  group2 := group1;
END;

顯示結(jié)果如下:

ERROR:  invalid input syntax for type integer: "a    "
CONTEXT:  PL/SQL function inline_code_block line 8 at assignment

您可以使用NULL將一個(gè)初始化過的變長(zhǎng)數(shù)組或嵌套表重新賦值為NULL。

DECLARE
  TYPE nt_type IS TABLE OF INT;
  nt nt_type; -- 初始狀態(tài)為 NULL

  PROCEDURE print_status IS
  BEGIN
    IF nt IS NULL THEN
      DBMS_OUTPUT.PUT_LINE('nt is null.');
    ELSE
      DBMS_OUTPUT.PUT_LINE('nt is not null.');
    END IF;
  END;
BEGIN
  print_status;
  nt = nt_type(); -- 初始化為空, 不為 NULL
  print_status;
  nt = NULL; -- 將其賦值為 NULL
  print_status;
END;

顯示結(jié)果如下:

nt is null.
nt is not null.
nt is null.
DO

關(guān)聯(lián)數(shù)組變量永遠(yuǎn)不會(huì)為NULL,因此將NULL賦值給關(guān)聯(lián)數(shù)組變量會(huì)直接報(bào)錯(cuò)。

DECLARE
  TYPE aarray_type IS TABLE OF INT INDEX BY VARCHAR(10);
  aarray aarray_type := NULL; -- 賦值為 NULL
BEGIN
END;

顯示結(jié)果如下:

ERROR:  can not assign NULL to associative array
CONTEXT:  PL/SQL function inline_code_block line 4 during statement block local variable initialization