在 Oracle 过程中声明表变量

Era*_*aph 1 oracle

我有很多时间试图找到一个这样做的例子。我有一个过程,作为该过程的一部分,我想存储 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,但我又遇到了另一个错误。

这个声明应该去哪里?或者,如果有更好的解决方案,我也会采纳!

Rob*_*puy 5

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)