--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;