Oracle 控制结构(如果/否则)
我试图创建plsql块,但它不起作用。甲骨文说我在第2行有错误。我想这可能是因为替换变量的位置不对Oracle 控制结构(如果/否则),oracle,variables,if-statement,sqlplus,Oracle,Variables,If Statement,Sqlplus,我试图创建plsql块,但它不起作用。甲骨文说我在第2行有错误。我想这可能是因为替换变量的位置不对 DECLARE V_ENAME EMPLOYEES.LAST_NAME%TYPE := '&LNAME'; V_SAL EMPLOYEES.SALARY%TYPE; BEGIN SELECT LAST_NAME, SALARY INTO V_ENAME, V_SAL FROM employees WHERE LAST_NAME = V_ENAME; IF V_SAL < 3000 T
DECLARE
V_ENAME EMPLOYEES.LAST_NAME%TYPE := '&LNAME';
V_SAL EMPLOYEES.SALARY%TYPE;
BEGIN
SELECT LAST_NAME, SALARY
INTO V_ENAME, V_SAL
FROM employees WHERE LAST_NAME = V_ENAME;
IF V_SAL < 3000 THEN
v_sal := v_sal + 500;
DBMS_OUTPUT.PUT_LINE (v_ename || 'have increasement ');
ELSIF V_SAL > 3000 THEN
DBMS_OUTPUT.PUT_LINE (v_ename || 'do not have increasement ');
ELSE
DBMS_OUTPUT.PUT_LINE ('error');
END IF;
END;
不确定这是否是您的问题,但当您已经在where子句中确保last_name等于v_ename时,确实不需要在v_ename中选择last_name。由于可能有许多员工的姓氏由用户传递,因此您可以使用隐式游标进行循环。此外,为了清晰起见,在输出中添加first_name
DECLARE
v_ename employees.last_name%TYPE := '&LNAME';
v_sal employees.salary%TYPE;
BEGIN
for rec IN ( SELECT first_name,last_name,salary
FROM employees WHERE last_name = v_ename
)
LOOP
IF rec.salary < 3000 THEN
v_sal := rec.salary + 500;
dbms_output.put_line (rec.first_name||' '||rec.last_name ||
' has an increase');
ELSIF rec.salary > 3000 THEN
dbms_output.put_line (rec.first_name||' '||rec.last_name ||
' does not have an increase ');
ELSE dbms_output.put_line ('error');
END IF;
END LOOP;
END;
/
谢谢,但它不起作用。。。它还显示在第51行未找到的数据。我必须声明变量V_SAL以保存员工的工资;2.员工的姓氏必须保存到替换变量中;3.当我们输入员工的姓氏时,其工资必须保存到V_SAL中@诺南:不客气。如果你发现答案是有用的,考虑它,它也会帮助别人。
..
old:DECLARE
v_ename employees.last_name%TYPE := '&LNAME';
..
new:DECLARE
v_ename employees.last_name%TYPE := 'Grant';
..
Douglas Grant has an increase
Kimberely Grant does not have an increase
PL/SQL procedure successfully completed.