我有很多时间试图找到一个这样做的例子。我有一个过程,作为该过程的一部分,我想存储 SELECT 语句的结果,以便我可以针对该集合进行操作,然后将其用作参考以在全部完成后更新原始记录。
我遇到的困难在于声明临时表变量。这是我正在尝试做的一个例子:
PROCEDURE my_procedure
IS
output_text clob;
temp_table IS TABLE OF MY_TABLE%ROWTYPE; -- Error on this line
BEGIN
SELECT * BULK COLLECT INTO temp_table FROM MY_TABLE WHERE SOME_DATE IS NULL;
-- Correlate results into the clob for sending to email (working)
-- Set the SOME_DATE value of the original record set where record is in temp_table
Run Code Online (Sandbox Code Playgroud)
第二次出现 时出现错误IS,说这是一个意外符号。这向我表明我的表变量声明要么是错误的,要么是在错误的地方。我试过在DECLARE之后将它放入一个块中BEGIN,但我又遇到了另一个错误。
这个声明应该去哪里?或者,如果有更好的解决方案,我也会采纳!
CREATE OR REPLACE PROCEDURE PROCEDURE1 AS
output_text clob;
type temp_table_type IS TABLE OF MY_TABLE%ROWTYPE;
temp_table temp_table_type;
BEGIN
SELECT * BULK COLLECT INTO temp_table FROM MY_TABLE;
END PROCEDURE1;
Run Code Online (Sandbox Code Playgroud)
或者
CREATE OR REPLACE PROCEDURE PROCEDURE1 ( output_text OUT clob ) IS
type temp_table_type IS TABLE OF MY_TABLE%ROWTYPE
INDEX BY BINARY_INTEGER;
temp_table temp_table_type;
BEGIN
SELECT * BULK COLLECT INTO temp_table FROM MY_TABLE;
FOR indx IN 1 .. temp_table.COUNT
LOOP
something := temp_table(indx).col_name;
END LOOP;
END PROCEDURE1;
Run Code Online (Sandbox Code Playgroud)