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执行过程中为真,结束后为假