【问题标题】:Oracle Stored Procedure into a ViewOracle 存储过程到视图中
【发布时间】:2017-06-12 19:55:18
【问题描述】:

我在 oracle 中有一个 SP,它返回一个游标,在我有一个查询来创建一个视图之前,但是由于我需要的数据的复杂性,获得它的更好的选择是一个 SP,但我严格需要查看信息(客户的要求),但现在我不知道如何在视图中放置/转换数据(光标),我正在检查全局临时表,但这意味着我需要在访问视图之前调用 SP,这是不可能的。我必须使用 select 调用访问视图,Select * from view_data_sp,显然性能不受影响。

知道如何实现这一目标吗?

谢谢

【问题讨论】:

    标签: sql oracle stored-procedures


    【解决方案1】:

    考虑使用记录类型、记录表和管道行。像这样的东西可以解决问题吗?

    CREATE OR REPLACE package sysop as
      type file_list_rec is record(filename varchar2(1024));
      type file_list is table of file_list_rec;
    
      function ls(v_directory varchar2) return file_list pipelined;
    end;
    /
    
    CREATE OR REPLACE package body sysop as
      function ls(v_directory varchar2) return file_list pipelined is
        rec file_list_rec;
        v_host_list varchar2(32000) := '';
      begin
        v_host_list := host_list(v_directory);
    
        for file in (
          select regexp_substr(v_host_list, '[^'||chr(10)||']+', 1, level)
            from dual
              connect by
                regexp_substr(v_host_list, '[^'||chr(10)||']+', 1, level) is not null)
          loop
            pipe row (file);
          end loop;
         return;
      end ls;
    end sysop;
    /
    

    【讨论】:

    • 谢谢Mikolas,我要试试这个,但我确实有一个问题,对性能有影响吗?因为每次查询视图都完成了整个流程,包括循环和调用SP?
    • 我不知道任何可能的性能瓶颈。一旦查询写得很好。开销只是灵活性的代价。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2011-05-11
    • 2015-10-31
    • 1970-01-01
    • 2011-01-03
    • 2011-12-29
    相关资源
    最近更新 更多