如何初始化记录集合?

时间:2018-03-08 10:15:04

标签: oracle plsql

SET serveroutput ON;

DECLARE
    TYPE enreg IS RECORD 
    (mot varchar(30),sig varchar(30));

    TYPE tab IS TABLE OF enreg;
    t tab := tab({'html','html'},{'css','css'});

BEGIN
    dbms_output.put_line(t(1).mot) ;
END;

2 个答案:

答案 0 :(得分:1)

您无法初始化RECORDS,它们会自动初始化。您可以设置值,例如:

DECLARE

    TYPE enreg IS RECORD (mot VARCHAR(30),sig VARCHAR(30));

    en1 enreg;
    en2 enreg;

    TYPE TAB IS TABLE OF enreg;
    t TAB;

BEGIN

    en1.mot := 'html';
    en1.sig := 'html';
    en2.mot := 'css';
    en2.sig := 'css';
    t := TAB(en1, en2);
    DBMS_OUTPUT.PUT_LINE( t(1).mot) ;

    SELECT 'html', 'html'
    INTO en1
    FROM dual;  
    SELECT 'css', 'css'
    INTO en2
    FROM dual;
    t := TAB(en1, en2);
    DBMS_OUTPUT.PUT_LINE( t(1).mot) ;

END;

答案 1 :(得分:0)

  

我在声明部分初始化它,而不是像t(1).mot:='html', t(1).sig:='html' !!

这样的开头

如果你有一个可以填充记录的函数,你可以在块的DECLARE部分进行:

SET ServerOutPut ON;

DECLARE
  TYPE enreg IS RECORD (mot varchar(30),sig varchar(30));
  TYPE tab IS TABLE OF enreg;
  FUNCTION createEnreg( mot VARCHAR2, sig VARCHAR2 ) RETURN enreg;

  t TAB := TAB( createEnreg('html','html'), createEnreg('css','css') );

  FUNCTION createEnreg( mot VARCHAR2, sig VARCHAR2 ) RETURN enreg
  IS
    e enreg;
  BEGIN
    e.mot := mot;
    e.sig := sig;
    RETURN e;
  END;

BEGIN
  Dbms_output.put_line(t(1).mot) ;
END;
/