PL SQL Temporary Table - PullRequest
       7

PL SQL Temporary Table

0 голосов
/ 05 июня 2018

Мне нужно создать пару ключ-значение в PL SQL.

Я знаю, что у Oracle нет такой же концепции временных таблиц, как у SQL Server, но это помогло бы мне преобразовать разделениестрока в хеш, массив или аналогичный для его обработки.Моя проблема в том, что каждый раз, когда я пытаюсь использовать ассоциативный массив (таблица за индексом), я получаю следующую ошибку:

PLS-00103: Encountered the symbol "REPORTTABTYP" when expecting one of the following: := . ( @ % ;

Это объявление моего ассоциативного массива:

create or replace procedure "POST_TX"
(p_report IN VARCHAR2)
is
begin
    TYPE ReportTabTyp IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
    ReportTab ReportTabTyp := ReportTabTyp();

Точно так же я пытался использовать EXECUTE IMMEDIATELY в процедуре для создания временной таблицы, но, поскольку она не существует, процедура не компилируется.

Вотмоя полная процедура:

create or replace procedure "POST_TX"
(p_report IN VARCHAR2)
is
begin
    TYPE ReportTabTyp IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
    ReportTab ReportTabTyp := ReportTabTyp();

FOR loop_words IN
        (select level as ID, regexp_substr(p_report,'[^ ]+', 1, level) as report
        from dual
        connect by regexp_substr(p_report, '[^ ]+', 1, level) is not null)
    LOOP
        ReportTab(loop_words.ID) := loop_words.report;
    END LOOP loop_words;

    IF (LENGTH(TRIM(TRANSLATE(ReportTabTyp(2).report, ' +-.0123456789', ' '))) IS NULL) THEN
        -- Do stuff
    ELSE
        -- Output error
    END IF;
end;

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы можете создать глобальную временную таблицу в oracle и использовать ее в своем сеансе - GTT

0 голосов
/ 05 июня 2018

Ваш тип и переменная должны быть объявлены до begin.Похоже, у вас также есть типы данных, которые меняются местами.

create or replace procedure "POST_TX"
(p_report IN VARCHAR2)
is
    TYPE ReportTabTyp IS TABLE OF VARCHAR2(64) INDEX BY NUMBER;
    ReportTab ReportTabTyp := ReportTabTyp();
begin
...
...