2017-07-27 156 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