欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle-sql游标入门基础

程序员文章站 2022-11-22 17:07:10
DECLARE– 定义游标CURSOR c_cursor IS–返回 LSBZDW_DWBH ,LSBZDW_DWMCSELECT LSBZDW_DWBH ,LSBZDW_DWMC from LSBZDW WHERE LSBZDW_TYBZ=0 and lsbzdw_dwmc not like ‘%合并%’and lsbzdw_dwmc not like ‘%抵消%’ and lsbzdw_dwbh !=‘100001’ and rownum<=200;– 声明变量v_DWBH L...

DECLARE
– 定义游标
CURSOR c_cursor IS
–返回 LSBZDW_DWBH ,LSBZDW_DWMC
SELECT LSBZDW_DWBH ,LSBZDW_DWMC from LSBZDW WHERE LSBZDW_TYBZ=0 and lsbzdw_dwmc not like ‘%合并%’
and lsbzdw_dwmc not like ‘%抵消%’ and lsbzdw_dwbh !=‘100001’ and rownum<=200;

– 声明变量
v_DWBH LSBZDW.LSBZDW_DWBH%TYPE;
v_DWMC LSBZDW.LSBZDW_DWMC%TYPE;
v_DDH VARCHAR2(50);
v_userid VARCHAR2(50);
v_number varchar2(50);
v_sql varchar2(3000);
v_domainid varchar2(50);
BEGIN

– 打开游标
OPEN c_cursor;
– 获取数据 第一行赋值
FETCH c_cursor INTO v_DWBH, v_DWMC;
– 处理数据 循环
WHILE c_cursor%FOUND LOOP
– :=赋值 || 为拼接字符串
v_ddh:=‘gsld’||v_DWBH;
v_sql:=‘select sys_guid() from dual’;
EXECUTE IMMEDIATE v_sql into v_userid;
– ‘’’||v_DWBH||’’’ 引号内部 单引号要用两个表示一个 ‘||v_DWBH||’ 表示将 v_DWBH里面的值当做一个字符串来传输 整体可以理解为赋值
v_sql:=‘SELECT ID FROM gspuserdomain WHERE SHORTPINYIN=’’’||v_DWBH||’’’ AND NAME =’‘财务部’’’;
EXECUTE IMMEDIATE v_sql into v_domainid;
insert into gspuser (STARTPAGECONFIG, VALIDFROM, STATE, ALTERPASSFLAG, NAME, DEFORGID, NOTLOGIN_MAXDAYS, TYPE, PROFILE, PASSWORD, AUTHCONTENT,
LASTLOGINTEGERIME, USERPROFILE, CREATEDDATE, SYSINIT, PASSVALIDSPAN, PASSLASTCHANGEDTIME, ID, DESCRIPTION, CREATORID, LOCKTIME, VALIDTO, TIMELIMIT, DAYLIMIT,
CODE, LASTLOGINTIME, TELNUMBER, ISIMAFUSER, SECLEVEL, USERPIC, LOCKPASSWORD, DSOURCE, ISIMUSER, ISUSEDYNAMICPASS, LASTMODIFYTIME, DEFBIZPOSID, USERASSOBJECT, EMAIL)
values (null, null, ‘1 ‘, ‘0’, ‘公司领导’, ‘’||v_domainid||’’, 0, null, ‘’, ‘96niR3fsIyEsVNejULxb6lR3/bs=’, ‘1,0,0’,
null, null, ‘01-3月 -19 04.04.29.250416 下午’, ‘0’, 0, null, ‘’||v_userid||’’, null,
‘748fedee-5384-4e09-a4ad-960d1510b3e6’, null, null, ‘111111111111111111111111’, ‘1111111’, ‘’||v_ddh||’’, null, null,
‘0’, ‘PUBLIC’, null, null, ‘0’, ‘0’, ‘0’, ‘01-3月 -19 05.09.55.533000 下午’, null, 0, null);

 FETCH c_cursor INTO v_DWBH, v_DWMC;

END LOOP;
– 关闭游标
CLOSE c_cursor;
END;

游标的使用,看到的一段解释很好的概念,如下:
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放
在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
游标有两种类型:显式游标和隐式游标。在前述程序中用到的SELECT…INTO…查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,
系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多
行多列的SELECT语句。
游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
在我们进行insert、update、delete和select value into variable 的操作中,使用的是隐式游标
隐式游标的属性 返回值类型意义
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假

本文地址:https://blog.csdn.net/qq_39503451/article/details/107163628