【问题标题】:how to make a select query with functions pl sql如何使用函数 pl sql 进行选择查询
【发布时间】:2020-05-29 09:01:55
【问题描述】:

功能1:

create or replace function get_books (l_id in number)
return varchar
is l_return varchar2(100);
begin
select books into l_return from people where id=l_id;
return l_return;
end
/

功能2:

create or replace function  get_author (l_id in number)
return varchar
is l_return varchar2(100);
begin
select author in l_return from authors where id=l_id;
return l_return;
end
/

我想用 2 个功能进行选择,我想显示书籍和作者。 有可能吗?

【问题讨论】:

    标签: sql oracle plsql plsqldeveloper stored-functions


    【解决方案1】:

    是的,这是可能的。例如:

    select get_books (1) book,
           get_author(1) author
    from dual;
    

    大概,这两个函数都返回一个值。如果这些选择中的任何一个(在函数中使用)返回多于一行,它将失败。


    截至程序:您发布的代码无效,所以我修复了它。

    SQL> create or replace procedure get_categories (l_categories  in     varchar2,
      2                                              l_id          in     number,
      3                                              l_boolean        out boolean,
      4                                              l_error          out varchar2)
      5  is
      6  begin
      7  --   INSERT INTO categories (id, categories)
      8  --        VALUES (l_categories, l_id);
      9
     10     l_boolean := true;
     11     commit;
     12  exception
     13     when others
     14     then
     15        l_boolean := false;
     16        l_error := sqlerrm;
     17  end;
     18  /
    
    Procedure created.
    

    当它返回 2 个 OUT 参数时,您必须声明变量以接受这些值(v_booleanv_error)。此外,由于您不能直接显示布尔值,请使用CASE 并显示一个字符串

    过程不能作为 SQL SELECT 语句中的函数调用,因此您必须使用另一段 PL/SQL 代码;一个匿名的 PL/SQL 块是可以的。

    SQL> set serveroutput on
    SQL> declare
      2    v_categories varchar2(10) := 'ABC';
      3    v_id         number := 1;
      4    v_boolean    boolean;
      5    v_error      varchar2(200);
      6  begin
      7    get_categories(l_categories => v_categories,
      8                   l_id         => v_id,
      9                   l_boolean    => v_boolean,
     10                   l_error      => v_error
     11                  );
     12
     13    dbms_output.put_line(case when v_boolean then 'true' else 'false' end ||' - '||
     14                            v_error
     15                           );
     16  end;
     17  /
    true -
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

    • 我有这些功能和一个程序get_categories,我该如何介绍这个程序?我有一个包含这个功能和过程的包,我需要通过查询来提取信息。你能帮助我吗 ?我在互联网上找不到如何做到这一点
    • 这取决于过程做什么以及它返回哪种数据以及如何返回。
    • 创建或替换过程 get_categories(l_categories IN VARCHAR2,l_id IN NUMBER,l_boolean OUT BOOLEAN,l_error OUT VARCHAR2)开始插入类别(id,类别)值(l_categories,l_id); l_bool := 真;犯罪;其他情况除外 l_bool := FALSE; l_error := SQLERMM;结束;
    • 这是程序。
    • 您可以编写一个函数来调用该过程并返回一些对 SQL 友好的类型。但是,它只能返回一个值(或具有多个属性的对象类型,但我认为这可能是矫枉过正)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多