如何使用函数 pl sql 进行 select 查询
how to make a select query with functions pl sql
函数 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个功能的select,我想显示书籍和作者。
可能吗?
是的,这是可能的。例如:
select get_books (1) book,
get_author(1) author
from dual;
据推测,这两个功能 return 一个值。如果这些选择中的任何一个(在函数中使用)return 超过一行,它将失败。
截至程序:您发布的代码无效,因此我已修复它。
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.
由于它 return 有 2 个 OUT 参数,您必须声明变量以接受这些值(v_boolean
和 v_error
)。此外,由于您不能直接显示布尔值,因此使用 CASE
并显示 string 代替。
过程不能在 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>
函数 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个功能的select,我想显示书籍和作者。 可能吗?
是的,这是可能的。例如:
select get_books (1) book,
get_author(1) author
from dual;
据推测,这两个功能 return 一个值。如果这些选择中的任何一个(在函数中使用)return 超过一行,它将失败。
截至程序:您发布的代码无效,因此我已修复它。
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.
由于它 return 有 2 个 OUT 参数,您必须声明变量以接受这些值(v_boolean
和 v_error
)。此外,由于您不能直接显示布尔值,因此使用 CASE
并显示 string 代替。
过程不能在 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>