我想使用select运算符选择一个包含日期(年份)的列,然后将其放入数组变量中,这样我就可以在循环中迭代它的值。
以下是完整的代码:
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
otdel VARCHAR2(20),
date_empl DATE,
salary NUMBER(10, 2),
bonus NUMBER(10, 2),
nalog NUMBER(10, 2)
);
INSERT INTO employees (employee_id, otdel, date_empl, first_name, last_name, salary)
VALUES (101, 'IT', to_date('2015-01-14', 'yyyy/mm/dd'), 'John', 'Doe', 5000),
(102, 'TOP Management', to_date('2007-06-30', 'yyyy/mm/dd'), 'Jane', 'Smith', 6000),
(103, 'IT', to_date('2010-02-23', 'yyyy/mm/dd'), 'Alice', 'Johnson', 5500),
(104, 'Sales', to_date('2017-08-24', 'yyyy/mm/dd'), 'Sean', 'Connery', 3500),
(105, 'Sales', to_date('2019-03-30', 'yyyy/mm/dd'), 'Marv', 'Smith', 3000);
COMMIT;
DECLARE
TYPE SelRes IS VARRAY(10) OF NUMBER(4,0);
years SelRes;
xxx NUMBER(4,0);
BEGIN
SELECT EXTRACT (YEAR FROM empl.date_empl) INTO years FROM employees empl;
FOR y in years
LOOP
SELECT COUNT(*) INTO xxx FROM employees empl WHERE EXTRACT (YEAR FROM empl.date_empl) = y;
IF xxx>0 THEN
DBMS_OUTPUT.PUT_LINE(y || ': ' || xxx || ' empl(-s) hired');
END IF;
END LOOP;
END;
在这种情况下,错误发生在第一次选择时:
Output:
SELECT EXTRACT (YEAR FROM empl.date_empl) INTO years FROM employees empl;
*
ERROR at line 7:
ORA-06550: line 7, column 50:
PLS-00642: local collection types not allowed in SQL statements
ORA-06550: line 9, column 12:
PLS-00862: The type of the iterand is not compatible with an iteration control.
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored
这个想法如下:按年计算今年雇佣的员工人数。同时,我不想获取从MIN_YEAR到MAX_YEAR的所有年份,只想获取数组中的年份。
是否有可能以某种方式在PL/SQL中实现这一点?