1.简单的存储过程(无参数)
create or replace procedure p_aa
as
begin
dbms_output.put_line('aaa');
end;
create or replace procedure :这一串都是关键字
p_aa : 存储过程的名称
as:关键字。
begin:关键字。
dbms_output.put_line(‘aaa’); 输出内容,dbms_output.put_line() Oracle控制台输出方式。
end;关键字。
1.1无参存储过程调用,(3种方式,建议写好declare)
########### 使用declare调用
declare
begin
p_aa;
end;
############ 也可直接使用begin配合end调用
begin
p_aa; --在此处也可使用myDemo01();完成存储过程的调用
end;
############ 使用call调用
call p_aa();--call 存储过程名可完成调用,注意括号不能少
2.带有参数的存储过程(OUT[输出],IN[输入])
CREATE OR REPLACE PROCEDURE
"PROC_DEMO1"(name1 OUT VARCHAR,age IN NUMBER) AS --使用OUT/IN来决定参数使用方式
BEGIN
dbms_output.put_line('age='||age); -- || 表示分割字符串,等于做字符串拼接
SELECT '涨工资' INTO name1 FROM dual;
END;
name1 OUT VARCHAR:定义参数name1为OUT输出使用Oracle VARCHAR 类型
age IN NUMBER :定义参数age为IN输入使用Oracle NUMBER类型
INTO:表示把 SELECT 后的字符串赋入给 name1
dual:Oracle中的dual表是一个单行单列的虚拟表。
2.1带参存储过程的调用
DECLARE
name VARCHAR(10);--对应 name1 的同类型接收参数
BEGIN
PROC_DEMO1(name,23); --把定义好类型的name传入去接收name1
dbms_output.put_line('name='||name);
END;
3.while循环的存储过程
create or replace procedure p_aa
as
n_count number := 0; --无论创建还是调用,变量都建与AS关键字后
begin
while n_count < 5 loop
dbms_output.put_line(n_count);
n_count := n_count + 1;
end loop;
end;
n_count number := 0; 给n_count 赋值,存储过程参数赋值写法就是 :=
loop,end loop: 标明循环代码块
3.1while循环的调用
CALL p_aa();
4.for循环
CREATE OR REPLACE PROCEDURE
"PROC_DEMO1"
AS
str VARCHAR(10):='i=';
BEGIN
FOR ab IN 0..9 LOOP
dbms_output.put_line(str||ab);
END LOOP;
END;
FOR ab:ab 定义的变量,实替每次循环的对象结果
IN 0..9:定义循环范围,也可放入如: select * from student 等结果集进行筛选判断等
举例如下:
create or replace procedure p_aa
as
begin
FOR ab in (select * from student) loop
if (ab.id<3) then
dbms_output.put_line(ab.stuName);
end if;
end loop;
end;
ab.id<3:这里ab就代表每次循环出的student表每行数据,可以根据其某些数据做筛选判断都可以的
if(条件) then 内容 end if;就是if判断
4.1 for循环调用
########### 第一种as后定义了变量的调用
DECLARE
BEGIN
PROC_DEMO1();
END;
########### 第二种对某查询结果集做了处理的调用
CALL p_aa();