Oracle函数单表练习题
时间: 2023-11-30 07:03:51 浏览: 29
以下是一个Oracle函数单表练习题:
假设有一个名为“employees”的表,其中包含以下列:
- employee_id(员工ID)
- first_name(员工名字)
- last_name(员工姓氏)
- hire_date(雇佣日期)
- salary(薪水)
- department_id(部门ID)
请编写一个名为“avg_salary”的函数,该函数将计算给定部门ID的平均薪水。
函数应该接受一个整数参数表示部门ID,并返回一个数字表示平均薪水。如果没有找到给定部门ID的员工,则函数应该返回空值。
下面是一个可能的解决方案:
```sql
CREATE OR REPLACE FUNCTION avg_salary(dept_id IN NUMBER)
RETURN NUMBER
IS
avg_sal NUMBER;
BEGIN
SELECT AVG(salary) INTO avg_sal
FROM employees
WHERE department_id = dept_id;
RETURN avg_sal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;
```
该函数将返回指定部门ID的员工的平均薪水。如果没有找到员工,则返回空值。
相关问题
oracle 分析函数练习题
1. 统计每个部门的平均工资和最高工资。
```
SELECT department_id, AVG(salary), MAX(salary)
FROM employees
GROUP BY department_id;
```
2. 统计每个部门的平均工资和最高工资,并按照平均工资降序排列。
```
SELECT department_id, AVG(salary), MAX(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC;
```
3. 统计每个部门的平均工资和最高工资,并只显示平均工资高于公司平均工资的部门。
```
SELECT department_id, AVG(salary), MAX(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) > (SELECT AVG(salary) FROM employees)
ORDER BY AVG(salary) DESC;
```
4. 统计每个部门的平均工资和最高工资,并显示部门名称而非部门ID。
```
SELECT d.department_name, AVG(e.salary), MAX(e.salary)
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;
```
5. 统计每个部门的平均工资和最高工资,并显示部门名称而非部门ID,同时只显示平均工资高于公司平均工资的部门。
```
SELECT d.department_name, AVG(e.salary), MAX(e.salary)
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name
HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employees)
ORDER BY AVG(e.salary) DESC;
```
oracle循环练习题
### 回答1:
好的,我可以为您提供一些Oracle循环练习题,希望能对您有所帮助。
1. 编写一个PL/SQL程序,使用循环将从1到100的所有偶数打印出来。
```
DECLARE
i NUMBER := 1;
BEGIN
WHILE i <= 100 LOOP
IF MOD(i, 2) = 0 THEN
DBMS_OUTPUT.PUT_LINE(i);
END IF;
i := i + 1;
END LOOP;
END;
```
2. 编写一个PL/SQL程序,使用循环将一个数字的所有位数相加,直到得到一个一位数的结果。
```
DECLARE
num NUMBER := 12345;
sum NUMBER := 0;
BEGIN
WHILE num > 0 LOOP
sum := sum + MOD(num, 10);
num := TRUNC(num / 10);
IF num = 0 AND sum > 9 THEN
num := sum;
sum := 0;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('The result is: '||sum);
END;
```
3. 编写一个PL/SQL程序,使用循环将一个字符串中的每个单词首字母大写。
```
DECLARE
str VARCHAR2(100) := 'this is a test string';
new_str VARCHAR2(100) := '';
BEGIN
FOR i IN 1..LENGTH(str) LOOP
IF i = 1 OR SUBSTR(str, i-1, 1) = ' ' THEN
new_str := new_str || UPPER(SUBSTR(str, i, 1));
ELSE
new_str := new_str || SUBSTR(str, i, 1);
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(new_str);
END;
```
以上是三个Oracle循环练习题的示例代码,希望能对您有所帮助。
### 回答2:
Oracle循环练习题主要是针对PL/SQL开发语言中的循环结构进行练习和熟练掌握。以下是一个具体的练习题示例:
假设有一个学生表student,其中包含学生的ID、姓名和成绩信息,要求编写一个PL/SQL程序,计算并显示所有学生的平均成绩和总分。具体步骤如下:
1. 创建一个存储过程或匿名块,并在其中声明一个游标变量(cursor)和两个整型变量(total和count),分别用于保存总分和学生人数。
2. 使用游标变量查询student表中的所有学生记录,将结果集保存在游标变量中。
3. 使用循环结构(如FOR循环)遍历游标变量中的结果集,对每个学生的成绩进行累加,并同时统计学生人数。
4. 在循环内部,在总分变量和学生人数变量上进行累加操作。
5. 循环结束后,使用计算得到的总分和学生人数计算平均成绩,并将结果输出。
下面是一个例子演示了如何实现上述需求:
```sql
DECLARE
c_student SYS_REFCURSOR;
v_total NUMBER := 0;
v_count NUMBER := 0;
v_avg NUMBER;
v_id student.id%TYPE;
v_name student.name%TYPE;
v_score student.score%TYPE;
BEGIN
OPEN c_student FOR SELECT id, name, score FROM student;
LOOP
FETCH c_student INTO v_id, v_name, v_score;
EXIT WHEN c_student%NOTFOUND;
v_total := v_total + v_score;
v_count := v_count + 1;
END LOOP;
v_avg := v_total / v_count;
DBMS_OUTPUT.PUT_LINE('平均成绩:' || v_avg);
DBMS_OUTPUT.PUT_LINE('总分:' || v_total);
CLOSE c_student;
END;
/
```
通过以上的练习题,可以帮助我们巩固和提升对Oracle PL/SQL循环结构的理解和应用能力。
### 回答3:
Oracle循环练习题是一系列可以通过Oracle数据库的循环语句解决的问题。这些问题的目的是帮助学习者加强对Oracle循环语句(如WHILE循环、FOR循环)的理解,以提高对数据库的操作能力。
以下是一个例子:
问题:编写一个PL/SQL程序,对一个给定的整数n求和,其中n是从1到输入的整数之间的所有整数的和。
解答:
```
DECLARE
n NUMBER;
sum NUMBER := 0;
i NUMBER := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE('请输入一个整数n:');
DBMS_OUTPUT.GET_LINE(n);
WHILE i <= n LOOP
sum := sum + i;
i := i + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('从1到' || n || '的和为: ' || sum);
END;
/
```
这个例子使用了PL/SQL语言来解决问题。在这个例子中,我们声明了三个变量n, sum和i,n用于存储输入的整数,sum用于存储求和结果,i用于循环计数。然后通过WHILE循环从1到给定的整数n进行迭代,每次迭代计算sum的值。最后,我们使用DBMS_OUTPUT.PUT_LINE函数将结果输出到控制台。
这只是一个简单的例子,还有许多其他的Oracle循环练习题,可以通过编写PL/SQL程序来解决。通过不断练习,可以巩固对Oracle循环语句的理解,并提高对数据库操作的熟练度。