사용자 정의 유형을 사용하여 메모리 배열에 생성 - PLS-00306 잘못된 인수 수

사용자1567453

공간 메타데이터와 공간 인덱스가 있는 모든 테이블의 메모리 내 배열을 만들려고 합니다.

* 오류가 발생했습니다.

PLS-00306 잘못된 인수 개수

, 아래 코드 줄에서:**

v_idx_info_arr(v_array_counter) := 
                 idx_info_arr('THE_TABLE','THE_OWNER','THE_INDEX_NAME');

"index_info" 유형에 varchar2(100) 유형의 필드가 3개 있는 경우 인수 수가 잘못된 이유는 무엇입니까?

코드를 that^에서 로 변경할 계획 idx_info_arr(rec.index_name, rec.table_owner, rec.table_name);이지만 테스트를 위해 하드 코딩된 문자열만 남겨두었습니다.

또한 문서 및 스택 오버플로 질문에서 함께 연결했기 때문에 PL/SQL에서 사용자 지정 유형 및 배열이 작동하는 방식에 대해서도 잘 모르겠습니다. 이러한 선언 및 사용에 대한 수정은 환영합니다.

DECLARE
    TYPE index_info IS RECORD(
        table_name varchar2(100),
        table_owner varchar2(100),
        index_name varchar2(100)
    );

    CURSOR all_geom_tables IS
    SELECT gt.owner, gt.table_name, gt.column_name, gt.srid
        FROM all_sdo_geom_metadata gt
        WHERE SRID = 8311            
        ORDER BY TABLE_NAME;

    type idx_info_arr is table of index_info;
    array v_idx_info_arr := idx_info_arr();
    v_array_counter integer := 0;

    v_table_geom sdo_geometry;
    v_spt_index varchar2(100);
    v_view_count integer;
    v_index_count integer;
BEGIN 
-- Start Loop Through all tables in database
    FOR db_table IN all_geom_tables LOOP  
        -- Loop through all tables which have a spatial index
        FOR rec IN (select table_name, table_owner, index_name 
   from ALL_SDO_INDEX_INFO WHERE 
 TABLE_OWNER = db_table.owner
    AND TABLE_NAME = db_table.table_name) LOOP                    
            DBMS_OUTPUT.PUT_LINE('Index name is: ' || rec.index_name);                    
            -- record the index here
      v_idx_info_arr(v_array_counter) := idx_info_arr('THE_TABLE','THE_OWNER','THE_INDEX_NAME');            
            v_idx_info_arr.extend();
            v_array_counter := v_array_counter + 1;
        END LOOP;
    END LOOP;
END;
카우식 나약

Oracle 18c 미만 버전의 경우 모든 레코드 요소를 한 번에 할당할 수 없습니다. 개별적으로 할당해야 합니다. 또한 v_idx_info_arr.extend요소를 지정하지 않고 초기화한 후에도 컬렉션의 크기는 여전히 0이므로 루프 전에 가 필요합니다.

Oracle 12.2 이하 버전용 코드

DECLARE
     TYPE index_info IS RECORD ( table_name        VARCHAR2(100),
     table_owner       VARCHAR2(100),
     index_name        VARCHAR2(100) );
     TYPE idx_info_arr IS
          TABLE OF index_info;
     v_idx_info_arr    idx_info_arr := idx_info_arr ();
     v_array_counter   INTEGER := 1;

BEGIN
     v_idx_info_arr.extend;
     FOR i IN 1..10 LOOP
          v_idx_info_arr(v_array_counter).table_name := 'THE_TABLE';
          v_idx_info_arr(v_array_counter).table_owner := 'THE_OWNER';
          v_idx_info_arr(v_array_counter).index_name := 'THE_INDEX_NAME';
          v_idx_info_arr.extend ();
          v_array_counter := v_array_counter + 1;
     END LOOP;
END;
/

Oracle 18c 는 그렇게 할 수 있는 Qualified 표현식도입했습니다 .

v_idx_info_arr(v_array_counter)  := 
                  index_info('THE_TABLE','THE_OWNER','THE_INDEX_NAME');

18c용 데모

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

oci_execute(): ORA-06550: PLS-00306: 잘못된 수 또는 유형의 인수

PLS-00306에 대한 알 수없는 이유 : 잘못된 수 또는 인수 유형

ODP.Net-사용자 정의 유형 매개 변수로 저장 프로 시저를 호출하면 ORA-06550 / PLS-00306이 발생합니다.

PLS-00306 : 'CREATE_PROGRAM'호출시 잘못된 수 또는 인수 유형

PLS-00306 : Oracle SP 호출시 잘못된 수 또는 인수 유형

Oracle Stored Procedure PLS-00306 : 잘못된 개수 또는 인수 유형

PLS-00306 : 'PUT_LINE'호출시 잘못된 수 또는 인수 유형

Oracle 절차-PLS-00306 : 잘못된 개수 또는 인수 유형

열거 형을 메서드의 매개 변수로 사용하여 열거 형을 반복하면 잘못된 캐스트가 생성됩니다.

PLS-00306 : 오라클 함수를 호출 할 때 잘못된 개수 또는 인수 유형

정수 배열에서 stoul을 사용하는 std :: string의 잘못된 출력

그룹화에 테이블 사용 : 인수의 잘못된 '유형'(문자)

수집에 AttributeConverter를 사용하면 HHH015007이 발생하는 이유 : 정적 메타 모델 필드 주입에 대한 잘못된 인수

사용자 정의 pam 모듈을 사용하여 사용자 이름의 데이터를 밀수 없습니다-input_userauth_request : 잘못된 사용자

메모리를 사용하여 문자열을 가져 오면 잘못된 결과가 생성됨

다른 생성자에서 지정된 매개 변수를 사용하여 배열 목록을 다시 조정

사용자 정의 개체 목록을 생성하면 문자열 유형의 인수를 매개변수 유형 Phone에 할당할 수 없습니다.

열거 형에 정의 된 정적 필드를 생성자에서 인수로 사용하십시오.

CVC4에서 유형 매개 변수를 사용하여 사용자 정의 데이터 유형의 인수가없는 생성자 호출

문자열을 사용하여 ChromeWebElement를 만들 때 잘못된 인수 예외가 발생했습니다.

ValueError : 10 진수를 사용하는 int ()에 대한 잘못된 리터럴 : ''-문자열을 정수로 변환

Data 및 Typeable을 사용하여 생성자의 인수 유형 가져 오기

golang을 사용하여 함수 인수에서 배열 유형 생략

Python을 사용하여 DataFrame에 잘못 작성된 값을 수정(수정)하는 방법

Java에서 리플렉션을 사용하여 메서드 / 생성자를 재정의 할 수 있습니까?

키워드 "any"를 사용하지 않고 Typescript에서 잘못 배치 된 유형을 수정하는 방법

토큰 "("은 json 유형을 포함하는 사용자 정의 유형에 할당하는 함수를 호출하는 잘못된 오류입니다.

Xtend 활성 주석을 사용하여 생성 된 Java Setter에 문자열 유형의 매개 변수를 추가하는 방법은 무엇입니까?

클래스 생성자에서 사용 된 열거 형, 클래스 내의 메서드가 참조 변수를 인식하지 못함