例子
存储过程:
create or replace procedure ws_test(strs in varchar2) as
str varchar2(20);
cursor ybs is SELECT REGEXP_SUBSTR(strs,'[^,]+',1,rownum) a from dual connect by rownum<=LENGTH(strs)-LENGTH(regexp_replace(strs,',',''))+1;
begin
open ybs;
loop
fetch ybs into str;
exit when ybs%notfound;
dbms_output.put_line(str);
end loop;
close ybs;
end ws_test;
打开测试窗口进行测试:
运行结果:
先学习PLSQL编程
一、PLSQL基本用法
注释:
declare 作用:定义变量、游标
begin 开始执行
end 结束执行
dbms_output.put_line(‘hello world’); PLSQL打印语句
|| 字符串的拼接符
sql>set serveroutput on 命令窗口打开打印结果开关
二、变量
共三种变量:
1、普通变量
变量名 类型(长度);
例子: name varchar2(20);
赋值(两种方法):
name varchar2(20) := ‘张三’;
select ‘张三’ into name from dual;
2、引用型变量
变量名 表.字段%TYPE;
特点:变量的类型和长度取决于表中字段的类型和长度
例子: name user.uname%TYPE;
3、记录型变量
变量名 表%rowtype;
特点接受表中的一整行记录
例子: name user%rowtype;
三、条件分支(判断)
if 条件1 then 执行1
elsif 条件2 then 执行2
else 执行3
end if;
四、循环(3种)
其中的loop循环:
loop
exit when 退出循环条件
end loop;
五、游标(集合类型)
特点:用于临时存储一个查询返回的多行数据,遍历游标,逐行访问处理该结果集
使用方式:声明—打开—读取—关闭
声明:cursor 游标名[(参数列表)] is 查询sql;
例:cursor ybs is select name from user;
打开:open 游标名[(参数)];
取值:fetch 游标名 into 变量列表;
关闭:close 游标名;
游标属性(4个):
存储过程(结合上边例子)
PLSQL语言只能执行一次,所以创建存储过程能够使其多次使用;
存储过程语法和PLSQL一样,大同小异;
定义变量时,declare可有可无。
语法:
create or replace procedure 名称[(参数列表)] is
begin
end [名称];
把例子拿过来讲解:
例子目的:将一个字符串根据 “,” 分成数组,并挨个输出
--开始定义存储过程 输入参数:strs
create or replace procedure ws_test(strs in varchar2) as
--声明变量:str
str varchar2(20);
--声明游标:ybs 后边的SQL是将strs根据 “,” 分隔开生成一列值
cursor ybs is SELECT REGEXP_SUBSTR(strs,'[^,]+',1,rownum) a from dual connect by rownum<=LENGTH(strs)-LENGTH(regexp_replace(strs,',',''))+1;
--开始执行存储过程
begin
--打开游标
open ybs;
--开始loop循环
loop
--将游标的值逐个赋予str
fetch ybs into str;
--循环退出条件:游标属性 ybs没有数据时为true
exit when ybs%notfound;
--输出str的值(也可以做增删改查操作)
dbms_output.put_line(str);
--循环结束
end loop;
--关闭游标
close ybs;
--存储过程结束
end ws_test;
小知识点:
1、可以直接在begin上面声明变量
2、创建存储过程时,is—as 可以互换
3、存储过程参数:
输入参数格式: 参数名 in 数据类型
输出参数格式: 参数名 out 数据类型
注:多个参数时,逗号隔开
plsql调用存储过程:
测试窗口: 在begin下面直接写 存储过程名字(参数),运行
命令窗口调用: sql> exec 存储过程名字(参数);