カーソルに値のセットがあります。たとえば:empid
は、第1の選択(where ISenrolled =1
)の両方で表示され、第二(where ISenrolled =2
)を選択した場合PL/SQLカーソル一意のレコードを選択し、フラットファイルで印刷
CURSOR c_stock_option IS
SELECT empid, '1' AS ISenrolled
FROM employee emp
UNION ALL
SELECT empid, '2' AS ISenrolled
FROM employee emp;
は今、私が確認したいです。私は最初の選択where enroll=1
から値を取得し、where enroll=2
を拒否したいだけです。この基準を満たすレコードだけを印刷したいと思う。
FOR v_stock_option_record IN c_stock_option LOOP
IF v_esppstock_recs IN (v_stock_option_record.empid) THEN
END IF;
-- Participant file.
v_member_string_1 := v_stock_option_record.empid || G_DELIMITER || --1. participant id
v_stock_option_record.last_name || G_DELIMITER || --4. Last Name
v_stock_option_record.first_name || G_DELIMITER || --5. First Name
END loop;
クエリの最初の部分で、それは(それが株式を購入した従業員のセットのみを与える株式を購入したすべての従業員を選択され、クエリの他の部分は、内のすべてのアクティブな従業員を与えます会社の従業員が選択肢の最初の部分にある従業員は常に選択の第2部分にありますが、選択の第2部分にある従業員は必ずしも第1部分にはありません。私がする必要があるのは、isenrolled = 1の従業員だけを選択することです)。 以下はそれ以外の場合は2 IsEnrolled
を返すよ、ここにそれが存在する場合、それだけで1 => IsEnrolledを返します動作するはず一つの方法である
SELECT
empid,
'1' AS ISenrolled
FROM employee emp,
hrempusf usf
where emp.employee = usf.employee
AND usf.field_key = 76 ---- 76 determines that employee has purchased stocks
UNION ALL
SELECT
empid,
'2' AS ISenrolled
FROM employee emp;
私はあなたのコードをフォーマットしました([推奨](http://meta.stackexchange.com/questions/71252/pl-sql-cursor-select-unique-records-from-cursor-and-print-in-フラットファイルクローズ))、あなたのコードの一部が実際にSQLコメントであることが明らかになりました。それを修正するには「編集」をクリックしてください。 (私は既に最初のクエリの2行目から1つの誤った "AS"を削除しました) – Arjan
@user、あなたは編集してもコードを修正しませんでした...また、SELECT自体は意味をなさない。 – Arjan
クエリから、UNION ALLの両方の部分には常に同じempoyeesが設定されます。正確にあなたが望むものの詳細を与え、より明確な答えを得る。 – Nivas