首页 文章

sql oracle程序用select

提问于
浏览
0

在使用select时,我遇到了一些程序问题

我需要一个程序,向我展示某个员工多年的经验

它看起来像这样:我写了一个雇员的名字,它向我展示了岁月

我想出了这样的事情:

CREATE OR REPLACE PROCEDURE check_emp (fname in varchar2(20))
AS
emp_fname employee.fname%TYPE;
emp_hire_date employee.hire_date%TYPE;
BEGIN
select fname, hire_date in emp_fname, emp_hire_date FROM employee
where emp_fname = fname 
and emp_hire_date = months_between(sysdate, hire_date)/12;
if emp_hire_date > 30
then 
DBMS_OUTPUT.PUT_LINE (emp_fname ||'worked'||emp_hire_date||'years')
end if;
end;

它返回PLS-00103错误我也不认为我需要这两个字符串

emp_fname employee.fname%TYPE;
emp_hire_date employee.hire_date%TYPE;

我试着用

DECLARE emp_years in NUMBER;

但它也不起作用

2 回答

  • 0

    你在程序中有几个问题

    在DBMS_OUTPUT.PUT_LINE中

    • 你必须添加 ; (终止符)或者你会有错误 .

    • 在选择中你必须添加 into 而不是 in .

    • 在您没有指定varchar2长度的过程中 .

    • 在条件中,为什么要添加日期条件?你想要员工的总年份

    • 您需要从您已拥有的选择中的名称中得到什么 .
      if 条件

    • ,你是什么意思30?我指定员工是否超过一年,然后我们将有一个dbms输出

    这是最后的程序

    -- adding data
     insert into employee (FIRST_NAME,last_name,hire_date) values('Mike','WHITE' ,to_date('01/08/2015','DD/MM/YYYY'));
    commit;
    
    CREATE OR REPLACE PROCEDURE check_emp (fname varchar2)
    AS
    emp_fname VARCHAR2(100);
    emp_hire_date number;
    BEGIN
    
    select ROUND(months_between(sysdate, hire_date)/12) into  emp_hire_date FROM employee
    where FIRST_NAME = 'MIKE';
    --and hire_date = sysdate - floor(months_between(sysdate, hire_date)/12);
    
    if  emp_hire_date > 0
    then
    DBMS_OUTPUT.PUT_LINE (emp_fname ||' worked'||emp_hire_date||' years.');
    end if;
    end;
    
  • 0

    非常感谢@Moudiz解决这个问题,但我也编辑了他的代码现在它看起来就像我需要的那样

    CREATE OR REPLACE PROCEDURE check_emp (fnamee varchar2)
    AS
    emp_fname VARCHAR2(100);
    emp_hire_date number;
    BEGIN
    select fname, ROUND(months_between(sysdate, hire_date)/12) into  emp_fname,         
    emp_hire_date FROM employee
    where fname = fnamee;
    if  emp_hire_date > 0
    then
    DBMS_OUTPUT.PUT_LINE (emp_fname ||' worked '||emp_hire_date||' years.');
    end if;
    end;
    

    所以你只需要写一个雇员的名字,程序就会返回他工作的年数

    begin
    check_emp ('Philip');
    end;
    

相关问题