过程选择1并删除

时间:2017-11-14 12:01:48

标签: oracle stored-procedures plsql

我正在尝试创建一个程序   1.选择第一条记录   2.删除记录并将其返回给调用者。

我有以下代码(请注意,我对PLSQL相当新)。 我从查看其他SO问题和oracle文档中得到了它。

CREATE PROCEDURE TAKE_1_DELETE_1
AS
BEGIN
DELETE FROM my_table
where rownum = 1
  RETURNING *
  INTO v_event;
END TAKE_1_DELETE_1;

我收到以下错误:

[Error] PLS-00103 (7: 3): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   ; <an identifier> <a double-quoted delimited-identifier>
   current delete exists prior <a single-quoted SQL st

我尝试过很多东西,但迄今为止都没有。

我们的数据仓库人员说&#34;我们不知道出了什么问题&#34;。

亲爱的众神......我需要做什么,让我的程序做我想做的事情? :)

1 个答案:

答案 0 :(得分:2)

这里有几个错误:

  1. 您尚未声明v_event,因此您尝试将数据返回到未实例化的变量/输出参数
  2. You can't "return" *你必须明确说明所有列 - 这是你得到的实际错误
  3. 假设一个看起来像这样的表

    create table my_table (a number, b number);
    

    您的程序如下所示:

    create or replace procedure take_1_delete_1 is
       v_event my_table%rowtype;
    begin
    
       delete from my_table
        where rownum = 1
       returning a, b
         into v_event;
    
    end take_1_delete_1;
    

    或者,如果您想在过程外使用返回值,则可以使用OUT参数而不是声明局部变量

    create or replace procedure take_1_delete_1 (p_event out my_table%rowtype) is
    begin
    
       delete from my_table
        where rownum = 1
       returning a, b
         into p_event;
    
    end take_1_delete_1;