时间:2021-07-01 10:21:17 帮助过:2人阅读
过程的分类:
(一)有过程参数
(二)没有过程参数的 1.输入参数(默认是输入参数) 2.输出参数 3.输入输出参数 基本语法规则: Create or replace procedure procedure_name(argument1 [mode1] datatype1 , argument2 [mode2] datatype2 ……) Is [as] PL/SQL Block; 注意:当定义参数时,只能指定数据类型,不能指定长度. 范例一:无参数的过程 create or replace procedure a_time is begin dbms_session.set_nls(‘nls_date_format‘,‘‘‘yyyy-mm-dd‘‘‘); dbms_output.put_line(sysdate); end; / 执行过程:(调用无参数过程可以直接引用过程名) SQL> exec a_time; 2008-03-04 PL/SQL 过程已成功完成 范例二:具有输入参数的过程: SQL> create or replace procedure b_insert (i emp.id%type,n emp.name%type) 2 is 3 begin 4 insert into emp values(i,n); 5 commit; 6 end; SQL> 过程已创建。 执行这个过程: SQL> exec b_insert(‘14‘,‘peter_lin‘); PL/SQL 过程已成功完成。 SQL> select * from emp; ID NAME ---------- ---------- 14 peter_lin 1 DICK_t 可以看到,数据自动插入到了表格中。 范例三:带有输出参数的过程: SQL> create or replace procedure c_update(old varchar2,new emp.id%type,nam out emp.name%type) 2 is 3 begin 4 select name into nam from emp where id=old; 5 update emp set id=new where id=old; 6 commit; 7 end; SQL> 过程已创建。 执行这个过程:带有输出参数的过程,需要使用变量接收这个输出值。 SQL> declare 2 nn emp.name%type; 3 begin 4 c_update(&old,&new,nn); 5 dbms_output.put_line(‘被修改id的员工姓名:‘||nn); 6 end; 7 / 输入 old 的值: 14 输入 new 的值: 12 原值 4: c_update(&old,&new,nn); 新值 4: c_update(14,12,nn); 被修改id的员工姓名:peter_lin PL/SQL 过程已成功完成。 SQL> select * from emp; ID NAME ---------- ---------- 12 peter_lin 1 DICK_t 已选择2行。 范例四:带有输入输出参数的过程 SQL>create or replace procedure in_out 2 (n1 in out number,n2 in out number) is 3 v1 number; 4 v2 number; 5 begin 6 v1:=trunc(n1/n2); 7 v2:=mod(n1,n2); 8 n1:=v1; 9 n2:=v2; 10 end; SQL> 过程已创建。 执行这个过程: SQL>declare 2 a1 number:=&n1; 3 a2 number:=&n2; 4 begin 5 in_out(a1,a2); 6 dbms_output.put_line(‘除法的商‘||a1||‘,除法的余数:‘||a2); 7 end; SQL> 输入 n1 的值: 100 原值 2: a1 number:=&n1; 新值 2: a1 number:=100; 输入 n2 的值: 3 原值 3: a2 number:=&n2; 新值 3: a2 number:=3;除法的商33,除法的余数:1
PLSQL存储过程(基础篇)-转
标签: