AI智能
改变未来

oracle数据库:存储过程和存储函数

1、编写一个存储过程,输入某个员工ID,输出其first_name和last_name

create or replace procedure print_name4(emp_id in int)is item EMPLOYEES%rowtype;beginSELECT *into itemfrom EMPLOYEESwhere EMPLOYEE_ID=emp_id;dbms_output.put_line(item.FIRST_NAME||\' \'||item.LAST_NAME);end print_name4;beginprint_name4(100);end;

2、编写一个存储过程,使用out型参数返回某员工的first_name和last_name。再写一个存储过程,调用之前的存储过程获得员工的first_name和last_name,并输出。

create or replace procedure print_name3(fname out varchar2,lname out varchar2) isitem   EMPLOYEES%rowtype;emp_id number;beginemp_id := 100;SELECT * into item from EMPLOYEES where EMPLOYEE_ID = emp_id;--dbms_output.put_line(item.FIRST_NAME||\' \'||item.LAST_NAME);fname := item.FIRST_NAME;lname := item.LAST_NAME;end print_name3;declarefname1 varchar2(50);lname1 varchar2(50);beginprint_name3(fname1,lname1);dbms_output.put_line(fname1||\' \'||lname1);end;

3、编写一个存储过程,使用 in out型参数,对于输入的电话号码,判断其类型,如果有区号,使用区号-电话号码的方式返回;如果是手机号码,按三位-四位-四位返回;再写一个存储过程,调用之前的存储过程,并输出。

--定义打印的存储过程CREATE OR REPLACE PROCEDURE println(str VARCHAR2)isBEGINdbms_output.put_line(str);END println;--测试in out模式的存储过程CREATE OR REPLACE PROCEDURE dianhua(p4 in out varchar2)isbegindeclarelen number;str1 varchar2(10);str2 varchar2(10);str3 varchar2(10);beginif substr(p4,1,1)=1thenstr1:=substr(p4,1,3);str2:=substr(p4,4,4);str3:=substr(p4,8,4);println(str1||\'-\'||str2||\'-\'||str3);elsestr1:=substr(p4,1,4);str2:=substr(p4,5,7);println(str1||\'-\'||str2);end if;end;end;DECLAREdian varchar2(30):=\'13112345678\';--声明一个变量用于设定存储过程调用前的值shou varchar2(30):=\'07312345678\';BEGINdianhua(dian);dianhua(shou);END;

4、创建存储过程,在期间插入,更新,删除某个表的记录

/*create or replace procedure addlineisbeginINSERT INTO EMPLOYEEs VALUES (\'97\', \'Stttten\', \'Kittng\', \'SKtttING\', \'525.123.4568\', TO_DATE(\'1986-06-17 00:00:00\', \'SYYYY-MM-DD HH24:MI:SS\'), \'AD_VP\', \'300001\', NULL, 100, \'90\');end addline;beginaddline;end;*/--删除一行记录create or replace procedure deleteline(id1 in number) isbegindelete from employees where employee_id = id1;end deleteline;declarezz number;beginzz := 97;deleteline(97);end;--更新一行记录create or replace procedure updateline(id1 in number) isbeginupdate employees e set e.salary=e.salary+400 where employee_id = id1;end updateline;declarezz number;beginzz := 98;updateline(98);end;

5、建立一个存储函数,输入某部门的ID,返回其部门的工资总和。

create or replace function sumSalary(dept_id in number)return numberiscursor c_salary is select salary from employeeswhere department_id=dept_id;sum_salary number(10):=0;beginfor c in c_salary loopsum_salary:=sum_salary+c.salary;end loop;return sum_salary;end sumSalary;select sumSalary(90) from dual;

6、在sql语句中使用之前建立的存储函数,在select子句和where子句中使用。写一个存储过程,期间使用动态sql,建立一个统计表,并把统计结果,插入这个表中。

create table sum_salary(department_id int,salary int);create or replace procedure calSumSalary iszzz number;hhh number;beginzzz := 10;while zzz < 270 loopzzz := zzz + 10;select sumSalary(zzz) into hhh from dual;insert into sum_salary values (zzz, hhh);commit;end loop;end calSumSalary;
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » oracle数据库:存储过程和存储函数