employees
(company_id、employee_num)とorders
の2つのテーブルがあります(employee_num、order_description )。入力パラメータ(ID、arrayOfNo [])に基づいて、従業員(最初のテーブル)と受注(2番目のテーブル)からレコードを削除するストアドプロシージャを作成
ユーザーがcompany_id
、employe_num
(1、[911912])のparams手順を送信した場合employees
テーブルにはIDが1のより多くの従業員番号を持っている場合、それは[911912913]従業員番号を持っているかのように、我々は、その後1で追加の従業員番号の行を削除する必要がありますemp_num 913
EX(手順)であり、それはemp_numとして913から行を削除し、注文内のすべてのレコードを削除すべきである(表2):例えば
CREATE OR REPLACE FUNCTION deleteEmployeeOrders(P_company_id bigint, orders_array arrayType[]) RETURNS INT AS $$
DECLARE
orders_array arrayType;
DECLARE
order arrayType;
DECLARE
status_code integer;
BEGIN
status_code:= -1;
FOR line IN (SELECT * FROM employees where company_id = p_company_id)
LOOP
if exists(select * from employees where emp_num = order.emp_num not in orders_array)
THEN
delete from employees where employee_num = order.employee_num;
DELETE FROM orders WHERE employee_num = order.employee_num;
END LOOP;
status_code = 1;
return status_code;
END;
$$ LANGUAGE plpgsql;
あなたはすべての従業員(および関連順)を削除するよう
それが行TABLE1に無EMPとして913を削除し、あなたの例ではemp_num 913
例:現在IDが1の従業員には3人の従業員がいます。しかし、2つの従業員numを渡すとき。これらの2つのレコードは、私が渡したものではなく、テーブルに存在するレコードを削除する必要があります。 – Sunanda
そして私は従業員番号の配列リストを手続きに渡すつもりです。配列をチェックする必要があります – Sunanda
したがって、orders_arrayにないemp_num値のレコードを削除したいだけですか?もしそうであれば、私は上記のロジックでこのDELETE文を修正することができます。そのように(2つのバッチDELETEステートメントを使用して)行うことができれば、それはLOOPで行うよりも優れているため、複数の個別のDELETEステートメントが実行されます。 – ravioli