create or replace procedure procedure_name --存储过程名字
(
--进行输入/输出的量 量_name in out 量_类型
--e.g.
username in varchar2, --varchar2类型无需标明长度
id out number(38)
)
is/as
--基本认为is和as是一致的,但是略有区别,在这个部分进行变量和常量的声明 //类似PL/SQL语句块中的declare部分
--变量/常量_name (constant) 1.变量/常量_类型;
-- 2.table_name.col_name%type //这个变量沿用这个表中的这个列的类型
-- 3._name //某个变量需要从外部传入,&**_name作为一个占位符
-- 4.自定义类型 //使用对象的概念理解
-- 5.table_name%rowtype
--e.g.
--
i constant number:=5;
username varchar2(40);
--
username tb_user.username%type;
--
username varchar2:=&name;
--
type type_name is record
(
id number(38);
username varchar2(40);
);
type_obj type_name; --(将某行的部分需要的值放进去)使用的时候:select tb.id,tb.username into type_obj from tb_user tb
--
users tb_user%rowtype; --(将某行的值放进去)使用的时候:select * into users from tb_user where id='1';
--声明游标,获取查询语句的结果集(多行多列); //游标申明中不要使用into子句 cursor cur_name is select col_name,col_name,, from table_name;
--e.g.
cursor temCur is select * from tb_user;
begin
--放置sql语句和pl/sql语句块
--赋值
a:=b;
--输出语句
dbms_output.put_line(''||''||''); --如果需要显示结果,set serveroutput on
--sql语句
--增
insert into table_name(col_name,col_name,,)
values(val_val,val_val,,);
--改
update table_name set col_name = val_val;
--删
delete from table_name ……
--游标
--1.显式游标
--2.隐式游标 select * into emp from table_name ……
--打开游标
--open cur_name;
--将游标中的值赋值到某值中
--fetch cur_name into get_name,get_name,,;
--关闭游标
--close cur_name;
--游标状态信息
--%isoipen //boolean
--%notfound //
--%found //
--%rowcount //目前为止,总行数
select col_name into temp_name from table_name --将表中的值(一行一列的值)取出放到这个“临时变量中”
--循环
--1.
loop
***
exit when ***
end loop;
--2.
while ***
loop
***
end loop;
--3.
for index in[reverse] ***
loop
***
end loop;
--判断
if *** then ***
elsif *** then ***
else ***
end if;
--提交事务
commit;
exception
--//异常处理
when too_many_rows then
***
when no_data_found then
***
*when others then
***
--rollback;
--commit
end procedure_name;
--调用存储过程
exec pro_name();
/*
--使用循环获取游标数据
declare
-- 定义emp类型
emp employees%rowtype;
-- 定义一个游标:拿到所有员工
cursor my_corsor is select * from employees;
begin
-- 打开游标
open my_corsor;
--循环开始打印游标
loop
-- 移动光标并获取相应的数据
fetch my_corsor into emp;
-- 如果没有相应数据则离开
exit when my_corsor%notfound;
-- 没有离开代表有数据,则可以打印展示出来
dbms_output.put_line(emp.first_name||' '|| emp.salary);
end loop;
--关闭游标
close my_corsor;
end;
--使用游标的for循环
PL/SQL语言提供了游标的for循环语句。
自动的执行游标的open,fetch和close。
当进入循环后,游标for循环语句会自动的打开游标,并提取第一行数据,
当程序处理完当前数据后,自动提取下一行数据。
当结果集中的内容提取完毕后,自动关闭游标。
格式:
FOR variables IN cursor_name(value,value...) LOOP
--处理语句
END LOOP;
declare
--定义一个游标:拿到所有员工
cursor my_corsor is select * from employees;
begin
--循环开始打印游标
for emp in my_corsor loop
-- 没有离开代表有数据,则可以打印展示出来
dbms_output.put_line(emp.first_name||' '|| emp.salary);
end loop;
end;
*/