--1 无入参最简单的存储过程 create or replace procedure hello_proc
as
v_name varchar2(20);
v_age number;
begin
v_name:='bai';
v_age:=18; dbms_output.put_line('你好'||v_name||',你今年'||v_age);
end; --在plsql中调用
begin
hello_proc;
end; /* 在command窗下运行
set serverout on;
exec system.hello_proc;
*/ --练习1
create or replace procedure show_sum_proc
as
v_i number:='1';
v_sum number:='0';
begin
loop
v_sum:=v_sum+v_i;
v_i:=v_i+1;
exit when v_i=201;
end loop;
dbms_output.put_line(v_sum);
end; --2 有入参的存储过程
create or replace procedure show_add_result
(
i number default 10, --默认值
j number default 20
)
as
v_result number;
begin
v_result :=i+j;
dbms_output.put_line(i||'+'||j||'='||v_result);
end; begin
show_add_result('2');
end; select * from scott.emp;
--经典例子
显示指定工号的员工姓名和工资,如果没有,则输出该员工不存在 create or replace procedure show_emp_by_eno_proc
(
v_eno scott.emp.empno%type:='7369'
)
as
v_ename varchar(20);
v_sal number;
begin
select ename,sal into v_ename,v_sal from scott.emp where empno=v_eno; dbms_output.put_line(v_eno||'对应的员工名'||v_ename||',工资'||v_sal);
exception
when no_data_found then
dbms_output.put_line('找不到'||v_eno||'对应的员工');
end; create or replace procedure show_emp_by_eno_proc
as
begin
dbms_output.put_line('测试重载');
end; begin
show_emp_by_eno_proc();
end; --根据姓名查找员工
create or replace procedure show_emp_by_ename_proc
(
v_ename varchar2
)
as
v_sal number;
begin
select sal into v_sal from scott.emp where ename=v_ename;
dbms_output.put_line(v_ename||'对应的员工工资'||v_sal);
exception
when no_data_found then
dbms_output.put_line('找不到'||v_ename||'对应的员工');
when too_many_rows then
dbms_output.put_line(v_ename||'对应的员工超过1个');
when others then
dbms_output.put_line('查找过程出现异常!');
end; ---
create or replace procedure show_dname_by_eno_depno
(
v_depno scott.dept.deptno%type
)
as
v_dname varchar(20);
begin
select dname into v_dname from scott.dept where deptno = v_depno; dbms_output.put_line(v_depno||'对应的部门名'||v_dname);
exception
when no_data_found then
dbms_output.put_line('找不到'||v_depno||'对应的部门');
end; --3 有入参,有出参的存储过程
输入i,j,用result出参获得相加的结果
create or replace procedure get_add_result_proc(
i number,
j number,
result out number --指定result为出参
)
as
begin
result:=i+j;
end; --使用plsql调用存储过程
declare
result number;
begin
get_add_result_proc('1','2',result);
dbms_output.put_line(result);
end; --创建存储过程,获得当前的日期和星期几
create or replace procedure get_date_and_day
(
v_date out varchar2 ,
v_day out varchar2
)
as
begin
select to_char(sysdate,'dd'),to_char(sysdate,'day') into v_date,v_day from dual;
end;