簡體   English   中英

如何定義將用作函數內的 IN 參數的參數?

[英]How to define a parameter that will be used as an IN argument inside a function?

我想做一個接收兩個參數的函數。 第一個代表一組員工的工資,第二個代表一組部門的代碼。 P_IN_SALARIES 和 P_IN_DEPARTMENTS_CODES 參數都將用作查詢的 IN 函數中的參數,如下面的代碼所示:

CREATE OR REPLACE FUNCTION public.get_employees_id(P_IN_SALARIES WHICH_TYPE_COMES_HERE, P_IN_DEPARTMENTS_CODES WHICH_TYPE_COMES_HERE)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
declare
    v_employees_ids text;
begin

    select STRING_AGG(employee.id || '', ',') into v_employees_ids
    from employee 
    inner join departament on department.id = employee.departament_id
    where employee.salary in (P_IN_SALARIES)
    and department.code in (P_IN_DEPARTMENTS_CODES);

    RETURN v_employees_ids;
END;
$function$
  • SQL 語句中的 IN 參數的類型是什么?
  • 是否有一個通用的我可以使用以便在偶爾的數據庫交換(例如到 Oracle)中允許某種可移植性?
  • 如何在休眠查詢中調用此函數?

在 Oracle 中,您可以使用集合數據類型:

CREATE TABLE number_list IS TABLE OF NUMBER;

然后您可以使用MEMBER OF運算符而不是IN

CREATE FUNCTION public.get_employees_id(
  P_IN_SALARIES          IN number_list,
  P_IN_DEPARTMENTS_CODES IN number_list
) RETURNS VARCHAR2
IS
    v_employees_ids VARCHAR2(4000);
BEGIN
    SELECT LISTAGG( id, ',' ) WITHIN GROUP ( ORDER BY id )
    INTO   v_employees_ids
    FROM   employee e 
           inner join departament d
           on ( d.id = e.departament_id )
    WHERE  e.salary MEMBER OF P_IN_SALARIES
    AND    d.department.code MEMBER OF P_IN_DEPARTMENTS_CODES;

    RETURN v_employees_ids;
END;
/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM