2017-07-27 154 views
1

我需要与employee_id从100通过emp表中选择员工110,回路和添加10%到每个emp_salary,然后从emp表显示结果关联数组和循环

DECLARE 
    vname VARCHAR(100); 
    TYPE emp_table_type is TABLE OF employees.last_name%TYPE 
    INDEX BY PLS_INTEGER; 

    vname_table emp_table_type; 

BEGIN 
    for i in 100..110 
    SELECT last_name into vname from employees where employee_id = i; 
    end loop; 

    vname_table(1) := vname; 

    DBMS_OUTPUT.PUT_LINE(vname_table(1)); 
End; 
+0

什么问题? – Dmitry

+0

这段代码必须选择雇员employee_id =到范围nd将他们的工资增加10%然后在emp表中显示结果..我该怎么做呢? –

回答

1

我需要选择员工EMPLOYEE_ID从100至110,环路 通过emp表,并添加10%到每个emp_salary,然后显示从emp表导致

你可以这样做:

DECLARE 
    sal   NUMBER;  
    TYPE emp_table_type IS TABLE OF employee.employee_id%TYPE 
     INDEX BY PLS_INTEGER;  
    vname_table emp_table_type; 

BEGIN 
    ---Selecting employee 
    SELECT employee_id 
    BULK COLLECT INTO vname_table 
    FROM employee 
    WHERE employee_id BETWEEN 100 AND 110; 

    FOR i IN 1 .. vname_table.LAST 
    LOOP 
     --- Updating Salary 
     UPDATE Employee 
      SET salary = salary + (salary * 0.10) 
      WHERE employee_id = vname_table (i) 
     RETURNING salary 
      INTO sal; 

    --- Displaying updated salary 
     DBMS_OUTPUT.PUT_LINE (sal); 
    END LOOP; 
END; 
+1

@GiftKamogelo值得注意的是,虽然XING已经回答了你的问题(我确信这是为了学习PL/SQL),但在现实世界中,你不会使用数组来做到这一点 - 相反,你会使用单个更新语句,例如'更新员工设置的薪水=工资* 1.1其中employee_id在100和110之间;'。尽量使用基于集合的方法,因为这将比逐行处理更有效。 – Boneist