sourcecode

PL/SQL에서 레코드 표 사용

copyscript 2023. 8. 7. 22:52
반응형

PL/SQL에서 레코드 표 사용

PL/SQL 패키지에 다음 유형을 선언했습니다.

TYPE t_simple_object IS RECORD (
   wert   NUMBER,
   gs     NUMBER,
   vl     NUMBER);

TYPE t_obj_table IS TABLE OF t_simple_object
  INDEX BY BINARY_INTEGER;

그런 다음 변수를 선언합니다.

obj t_obj_table;

그러나 변수를 사용하려면 변수를 초기화하거나 확장할 수 없습니다.

obj := t_obj_table ();

는 다음 오류를 표시합니다.

PLS-00222: no function with name 'T_OBJ_TABLE' exists in this scope

초기화하지 않으면 다음 날짜를 추가할 수 없습니다.

obj.EXTEND();

또 다른 오류 발생:

PLS-00306: wrong number or types of arguments in call to 'EXTEND'

어떻게 하면 이 일을 해낼 수 있을까요?

"뭔가"로 색인화된 테이블을 확장하지 않고 그냥 사용할 수 있습니다.

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object
   INDEX BY BINARY_INTEGER; 

   my_rec t_simple_object;
   obj t_obj_table; 
BEGIN
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/

EXTENT 구문을 사용하려면 이 예제를 사용해야 합니다.

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object; 

   my_rec t_simple_object;
   obj t_obj_table := t_obj_table(); 
BEGIN
   obj.EXTEND;
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/

링크도 참조(톰에게 묻기)

연관 배열(일명 인덱스 기준 테이블)을 사용하지 않으려면 "INDEX BY BINARY_"를 생략합니다.INTEGER" 절입니다.그러면 코드가 정상적으로 작동합니다.

declare 
    TYPE t_simple_object IS RECORD (
       wert   NUMBER,
       gs     NUMBER,
       vl     NUMBER);
    TYPE t_obj_table IS TABLE OF t_simple_object;
    obj t_obj_table;
begin  
    obj := t_obj_table ();
    obj.EXTEND();
end;

연관 배열을 확장할 수 없습니다.값을 할당하기만 하면 됩니다.

declare
  TYPE t_simple_object IS RECORD (
    wert   NUMBER,
    gs     NUMBER,
    vl     NUMBER);

  TYPE t_obj_table IS TABLE OF t_simple_object INDEX BY BINARY_INTEGER;

  simple_object t_simple_object;
begin
  simple_object.wert := 1;
  simple_object.gs := 2;
  simple_object.vl := 3;
  obj(1) := simple_object;
end;
/

또는 레코드를 사용하거나 레코드 배열을 연결합니다.

create or replace package p_test is

  type t_rec is record (
    empname varchar2(50),
    empaddr varchar2(50));

  function p_test_ret_record return t_rec;

end p_test;


create or replace package body p_test is

  function p_test_ret_record return t_rec is
     l_rec t_rec;
  begin
     l_rec.empname := 'P1';
     l_rec.empaddr := 'P2';     
     return l_rec;
  end;

end p_test;

declare
  -- Non-scalar parameters require additional processing 
  result p_test.t_rec;
begin
  -- Call the function
  result := p_test.p_test_ret_record;
  dbms_output.put_line('Name: ' || result.empname || ' Addr: ' || result.empaddr);
end;

언급URL : https://stackoverflow.com/questions/1606808/using-tables-of-records-in-pl-sql

반응형