PL SQL 临时 Table
PL SQL Temporary Table
我需要在 PL SQL 中创建键值对。
我知道 Oracle 没有与 SQL Server 相同的临时 tables 概念,但它可以帮助我将拆分字符串转换为散列、数组或类似的处理它。我的问题是,每次我尝试使用关联数组(索引 table)时,我都会收到以下错误:
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 来创建临时 table 但是,由于它不存在,程序无法编译。
这是我的完整程序:
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;
您的类型和变量应该在 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
...
您可以在 oracle 中创建全局临时 table 并在您的会话中使用 - GTT
我需要在 PL SQL 中创建键值对。
我知道 Oracle 没有与 SQL Server 相同的临时 tables 概念,但它可以帮助我将拆分字符串转换为散列、数组或类似的处理它。我的问题是,每次我尝试使用关联数组(索引 table)时,我都会收到以下错误:
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 来创建临时 table 但是,由于它不存在,程序无法编译。
这是我的完整程序:
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;
您的类型和变量应该在 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
...
您可以在 oracle 中创建全局临时 table 并在您的会话中使用 - GTT