初始化pl/sql记录类型

zig*_*ggy 7 sql oracle plsql oracle10g

在PL/SQL中,a varray可以在创建时初始化为:

TYPE colour_tab IS VARRAY(3) OF VARCHAR2(20);
    french_colours colour_tab := colour_tab('RED','WHITE','BLUE');
Run Code Online (Sandbox Code Playgroud)

PL/SQL记录类型是否有等效的初始化方法?

type location_record_type is record (
      street_address       varchar2(40),
     postal_code          varchar2(12),
      city                 varchar2(30),
     state_province       varchar2(25),
     country_id           char(2) not null := 'US'
    );
Run Code Online (Sandbox Code Playgroud)

im_*_*chc 7

使用函数作为一种"构造函数"函数(查看函数f()):

DECLARE
  TYPE ty_emp IS RECORD(
    id INTEGER,
    name VARCHAR(30),
    deptcode VARCHAR(10)
    );
  TYPE ty_tbl_emp IS TABLE OF ty_emp;
  tbl_emp ty_tbl_emp;
  FUNCTION f (             -- <==============
    id INTEGER,
    name VARCHAR,
    deptcode VARCHAR) RETURN ty_emp IS
  e ty_emp;
  BEGIN
    e.id := id;
    e.name := name;
    e.deptcode := deptcode;
    RETURN e;
  END f;
BEGIN

  tbl_emp := ty_tbl_emp(
    f(1, 'Johnson', 'SALES'), 
    f(2, 'Peterson', 'ADMIN'));
  Dbms_Output.put_line(tbl_emp(2).name);
END;  
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 5

Oracle 18c 允许使用限定表达式进行记录初始化:

declare 
type location_record_type is record (
      street_address       varchar2(40),
     postal_code          varchar2(12),
      city                 varchar2(30),
     state_province       varchar2(25),
     country_id           char(2) not null := 'US'
    );

myvar location_record_type;
myvar2 location_record_type := location_record_type(street_address => 'my street'
                                                   ,postal_code    => 'my code'
                                                   ,city           => 'my city'
                                                   ,state_province => 'my state'
                                                   ,country_id     => 'GB'
                                                   );

begin
  dbms_output.put_line(myvar.country_id);
  dbms_output.put_line(myvar2.city);
end;
/
Run Code Online (Sandbox Code Playgroud)

上面的输出是...

US
my city
Run Code Online (Sandbox Code Playgroud)

您可以在此处在 Oracle Live SQL 中运行上述示例代码。(不幸的是,该网站需要登录。)


DCo*_*kie 4

不,那里没有.您必须明确指定每个值.文档参考.