【问题标题】:Select Statement in oracle procedureoracle过程中的select语句
【发布时间】:2012-11-19 13:41:13
【问题描述】:

我无法在 oracle 过程中创建选择语句。请帮我创建这个。 现在我在一个过程中创建了 insert,update.delete 语句,但我无法创建一个 select 语句。请帮助我使用光标创建选择语句。

c_dbuser OUT SYS_REFCURSOR

ELSIF (TYPE_ =1) THEN

  OPEN c_dbuser FOR
  SELECT * FROM tbl_discount_master ;
  CLOSE c_dbuser;

END IF;

call procedure_name(xx,xx,xx,1);

如何使用调用过程语句获取选定的值。

【问题讨论】:

    标签: oracle oracle10g oracle11g oracle9i


    【解决方案1】:

    除了其他建议之外,当您获得正好一行时,您还有这个解决方案。

    DECLARE
        myvar1 mytable.mycolumn1%TYPE;
        myvar2 mytable.mycolumn2%TYPE;
    BEGIN
        SELECT mycolumn1, mycolumn2
          INTO myvar1, myvar2
          FROM mytable
         WHERE …;
    END;
    

    如果没有选定的行 (NO_DATA_FOUND) 或多于一行 (TOO_MANY_ROWS),这将引发异常。

    【讨论】:

      【解决方案2】:

      select 和 insert/update/delete 的区别在于你需要选择一些结构,要么是一个或多个变量,要么是一个 rowtype 变量。

      尽可能避免使用显式游标,以使用更快、更简洁且不易出错的隐式游标。 例如。

      for cur_my_query in
        select column1,
               column2,
               ...
        from   ...
        where  ...
      loop
        refer here to cur_my_query or my_query.column1 etc
      end loop
      

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多