PL SQL临时表

时间:2018-06-04 22:04:14

标签: plsql oracle-apex plsql-psp

我需要在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 :(得分:4)

您的类型和变量应在 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
...

答案 1 :(得分:1)

您可以在oracle中创建全局临时表,并在会话中使用 - GTT