mysql> create procedure pro_working_years(in no_empno int(4),out year_on_job int(4)) -> begin -> selectextract(year from now())-extract(year from hiredate) into year_on_job from emp where empno=no_empno; -> end -> // ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(year from now())-extract(year from hiredate) into year_on_job from emp where em' at line 3
时间: 2024-02-10 08:04:48 浏览: 105
根据报错信息,看起来是语法错误。可能是因为在select语句中使用了一个不支持的函数selectextract。正确的写法是使用select和extract分别来获取当前年份和雇佣日期的年份,然后计算出工作年限。你可以尝试修改代码如下:
```
CREATE PROCEDURE pro_working_years(IN no_empno INT(4), OUT year_on_job INT(4))
BEGIN
SELECT EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM hiredate) INTO year_on_job FROM emp WHERE empno = no_empno;
END;
//
```
这个过程将根据给定的员工编号计算该员工在公司的工作年限,并将结果存储在year_on_job变量中。
相关问题
用pgAdmin4来写这段代码CREATE PROCEDURE calc_avg_salary_for_emp_no @empno INT, @average REAL OUTPUT AS BEGIN SELECT @average = AVG(salary) FROM salaries WHERE emp_no = @empno END
这段代码是在 PostgreSQL 数据库中创建一个存储过程,名为 calc_avg_salary_for_emp_no。它有两个参数 @empno 和 @average,其中 @empno 是输入参数,表示员工编号,@average 是输出参数,用于返回该员工的平均工资。该存储过程的实现是通过查询 salaries 表来计算该员工的平均工资,并将结果赋值给 @average 参数。
在使用 pgAdmin4 编写该代码时,你需要打开 pgAdmin4 工具,并连接到目标 PostgreSQL 数据库。然后,在该数据库中的某个 schema 下创建一个新的存储过程,将上述代码复制粘贴到存储过程的定义中,并保存该存储过程。之后,你就可以通过调用该存储过程来获取指定员工的平均工资了。
用postgresql来写这段代码CREATE PROCEDURE calc_avg_salary_for_emp_no @empno INT, @average REAL OUTPUT AS BEGIN SELECT @average = AVG(salary) FROM salaries WHERE emp_no = @empno END
在 PostgreSQL 中,你可以使用函数或者存储过程来实现这段代码的功能。下面是一个使用函数的示例:
```
CREATE OR REPLACE FUNCTION calc_avg_salary_for_emp_no(empno INT, OUT average REAL) AS $$
BEGIN
SELECT AVG(salary) INTO average FROM salaries WHERE emp_no = empno;
END;
$$ LANGUAGE plpgsql;
```
要调用该函数并获取返回的平均工资值,请使用以下代码:
```
SELECT calc_avg_salary_for_emp_no(123, average);
```
其中,123 是员工编号,average 是输出参数,它将包含平均工资值。
阅读全文