Как вызвать и выполнить хранимую процедуру Oracle, используя TYPE в качестве параметра - PullRequest
0 голосов
/ 19 октября 2018

Это спецификация пакета:

PROCEDURE Save_Countries
    ( p_inst_id Number,
      p_CountryList  IN T_COUNTRY_TYPE
    )
AS
v_count number;
BEGIN
            for i in p_CountryList.first..p_CountryList.last loop

                  insert into countries (INST_ID, COUNTRY_NAME, COUNTRY_CODE)
                        values (p_inst_id, p_CountryList(i).COUNTRY_NAME, p_CountryList(i).COUNTRY_CODE);
            end loop;
      Commit;
end Save_Countries ;

Это спецификация типа:

create or replace TYPE OBJ_COUNTRY FORCE as OBJECT (
      COUNTRY_ID        NUMBER(10),
      COUNTRY_NAME      VARCHAR2(255),
      COUNTRY_CODE      VARCHAR2(6)
);
create or replace TYPE T_COUNTRY_TYPE as TABLE OF OBJ_COUNTRY;

ПокаУ меня есть это:

DECLARE
  P_INST_ID NUMBER;
  P_COUNTRYLIST T_COUNTRY_TYPE;
BEGIN
  P_INST_ID := 255;

  PKG_TEST.SAVE_COUNTRIES(
    P_INST_ID => P_INST_ID,
    P_COUNTRYLIST => P_COUNTRYLIST
  );
END;

Вопрос Я пытаюсь вызвать процедуру сохранения из моего Oracle SQL Developer.Как я могу инициализировать список (TYPE), чтобы передать его в качестве параметра.Я погуглил, но не смог найти что-нибудь, чтобы помочь с этим.

1 Ответ

0 голосов
/ 19 октября 2018

Для вложенных таблиц вы должны инициализировать и назначить элементы коллекции.

DECLARE
  P_INST_ID NUMBER;
  P_COUNTRYLIST T_COUNTRY_TYPE := T_COUNTRY_TYPE(); --initialization
BEGIN
  P_INST_ID     := 255;
  P_COUNTRYLIST.extend(2); --allocate 2 null elements.
  P_COUNTRYLIST(1) :=  OBJ_COUNTRY(1,'INDIA','IND'); --set the values
  P_COUNTRYLIST(2) :=  OBJ_COUNTRY(2,'AUSTRALIA','AUS');
--To assign n more elements, use P_COUNTRYLIST.extend(n);



  PKG_TEST.SAVE_COUNTRIES(
    P_INST_ID => P_INST_ID,
    P_COUNTRYLIST => P_COUNTRYLIST
  );
END;
/

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...