반응형
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
반응형
'sourcecode' 카테고리의 다른 글
mariadb 또는 mysql에서 json 배열 내의 요소를 찾고 삭제하는 방법 (0) | 2023.08.07 |
---|---|
swift의 고유한 배열 (0) | 2023.08.07 |
시스템입니다.웹.캐싱 또는 시스템.런타임.캐시는 에 적합합니다.NET 4 웹 애플리케이션 (0) | 2023.08.02 |
해쉬방? 안 해쉬방? (0) | 2023.08.02 |
server.cnf에 대한 my.cnf에서 skip-name-resolve?를 추가할 위치는 어디입니까? (0) | 2023.08.02 |