【问题标题】:how to write from clause in stored procedure如何在存储过程中写入from子句
【发布时间】:2014-09-26 06:34:22
【问题描述】:

需要在Procedure中写下Query with(在参数中使用)

 SELECT *
  FROM (SELECT a.ID,
               b.table_name,
               b.creation_date,
             RANK() OVER (PARTITION BY b.table_name ORDER BY b.creation_date desc) as date_ranking
     FROM  xxc_history a,
           xxc_history_details b
    WHERE  a.ID = b.ID
           AND name = P_NAME)
    WHERE   date_ranking = 1;

我需要在某个地方调用这个过程。我正在使用 Oracle Database 11g 企业版 11.1.0.7.0 - 64 位生产

【问题讨论】:

  • 您可以在查询中调用函数,但不能在过程中调用。
  • 感谢回复,这是显示所有行和记录吗..:)
  • 这与Oracle表单查询有关,我需要写在过程或函数中,需要在ORacle表单的按钮中调用这些程序

标签: oracle stored-procedures plsql


【解决方案1】:

您可以在函数中编写此查询并将结果集作为 sysrefcursor 返回

下面给出了一个refcursor方法的例子:

 create or replace function f_example (p_name varchar2) return sys_refcursor is

     v_sysrefcursor sys_refcursor;

  Begin
    open v_sysrefcursor for ( SELECT *
                              FROM (SELECT a.ID,
                               b.table_name,
                               b.creation_date,
                               RANK() OVER (PARTITION BY b.table_name ORDER BY                b.creation_date desc) as date_ranking
                             FROM  xxc_history a,
                                   xxc_history_details b
                             WHERE  a.ID = b.ID
                             AND name = P_NAME)
                             WHERE   date_ranking = 1);

                             return v_sysrefcursor;
  end f_example ;

在另一个过程 p_calling_proc 中调用这个函数:

  create or replace procedure p_calling_proc
   is

    v_sysrefcursor sys_refcursor;
     v_name varchar2(32);

  begin 
    v_name :='Vishad';

    v_sysrefcursor :=f_example(v_name);

 end p_calling_proc;

希望对你有帮助

维沙德

【讨论】:

  • 嗨,这是我传递的参数“AND name = P_NAME”,我必须使用 IN 参数
  • 并且需要在另一个过程中调用这个函数/过程
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
相关资源
最近更新 更多