ORACLE 触发器中 使用游标查询 本表 报错ORA-04091

racle 触发器.
监听表A 更新 更新后触发.
其中 使用游标查询表A 数据.
OPEN 游标时
会报 ORA-04091:表A发生了变化,触发器/函数不能读它

于是增加了自定义事物 pragma autonomous_transaction;
增加事物之后不报错了.但是OPEN 的游标 没有获取到任何数据.

想做到的效果是

是这样. 比如说表A里面有4条数据
1 aaaa
2 bbbb
3 cccc
4 dddd

完后在修改其中一条数据之后. 查询其余没有修改的3条数据.在插入到表B中.

所以这里我想查询触发器监听的表.

我应该怎么处理?有什么好的建议.我刚才尝试了一下勇士图 依然会同样报错

5个回答

或者参考一下这个

相信写过ORACLE行级触发器的IT同仁们大多遇到过ORA-04091问题,即在某表的行级触发器中不能读取当前表的问题,如:

create table test(id raw(16), name varchar2(100), primary key (id));
create table test_count(test_count int);
insert into test_count values(0);
commit;
create or replace trigger t_test
AFTER INSERT OR DELETE ON test
FOR EACH ROW
BEGIN
UPDATE test_count
SET test_count = (SELECT count(*) from test);
END t_test;
/

当您在插入test表时,系统会抱怨(当然计数这样的简单业务是不需要使用触发器来做的,仅用于举例):

第 1 行出现错误:
RA-04091: 表 TEST.TEST 发生了变化, 触发器/函数不能读它
RA-06512: 在 "TEST.T_TEST", line 2
RA-04088: 触发器 'TEST.T_TEST' 执行过程中出错

前几天看到触发器的INSTEAD OF子句,顺便用它搞定:

drop trigger t_test;
create view v_test as select id, name from test;
create or replace trigger t_v_test
INSTEAD OF INSERT OR DELETE OR UPDATE ON v_test
FOR EACH ROW
DECLARE
BEGIN
IF inserting THEN
INSERT INTO test(id, name) values(:new.id, :new.name);
END IF;
IF deleting THEN
DELETE FROM test WHERE id = :old.id;
END IF;
IF updating THEN
UPDATE test
SET id = :new.id, name = :new.name
WHERE id = :old.id;
ELSE
UPDATE test_count
SET test_count = (SELECT count(*) from test);
END IF;
END t_v_test;
/

原来对test表的插入改为对v_test插入,一切OK,搞定。

行级触发器是不允许select自身的,需要表级触发器才可以引用自身,建议你换个方法来实现

llhaose
傲娇的包子 表级别触发器的话.是可以获取到整个表么. 如何获取呢:old么?
4 年多之前 回复
lzp_lrp
WorldMobile 回复傲娇的包子: 是的,触发器里不要用for each row,那就是表级触发器,这里是允许的
4 年多之前 回复
llhaose
傲娇的包子 有什么办法可以实现呢. 如果用old获取 只能获取一条数据吧.而且是对应修改的数据.
4 年多之前 回复

ORACLE的触发器规则中,不能读取已经发生变更但没有提交事务的数据,修改前的内容使用 old.field 获取,修改后的值使用 new.field 获取,其中 field 是你的字段名

第 1 行出现错误:
RA-04091: 表 TEST.TEST 发生了变化, 触发器/函数不能读它, line 2
RA-04088: 触发器 'TEST.T_TEST' 执行过程中出错 就是这个意思,建议看下触发器、函数的使用,

第 1 行出现错误:
RA-04091: 表 TEST.TEST 发生了变化, 触发器/函数不能读它, line 2
RA-04088: 触发器 'TEST.T_TEST' 执行过程中出错 就是这个意思,建议看下触发器、函数的使用,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle游标变量-报错ORA-06550

--游标变量 DECLARE --定义非受限游标变量 TYPE t_AbcCur IS REF CURSOR; V_Cursorvar t_AbcCur; --声明游标变量 V_Emp EMP%ROWTYPE; OPEN V_Cursorvar FOR SELECT empno,ename,sal FROM emp WHERE sal<3000; --打开游标 FETCH V_Cursorvar INTO V_Abc; DBMS_OUTPUT.PUT_LINE('ID:'||V_Emp.empno||' NAME:'||V_Emp.ename||' AGE:'||V_Emp.sal); LOOP FETCH V_Cursorvar INTO V_Emp; EXIT WHERE V_Cursorvar%NOTFOUND; DBMS_OUTPUT.PUT_LINE('ID:'||V_Emp.empno||' NAME:'||V_Emp.ename||' AGE:'||V_Emp.sal); END LOOP; CLOSE V_Cursorvar; --关闭游标 END; 代码如上,但总是报ORA-06550错误 [Err] ORA-06550: 第 6 行, 第 21 列: PLS-00103: 出现符号 "FOR"在需要下列之一时: := . ( @ % ; not null range default character

存储过程 使用for循环更新执行 报错 ORA-06550

create or replace procedure test is Cursor C_EMP is select * from CST_TW_RECORD where GRANT_STATE = '0' and CLEAN_STATE = '3' ; C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录 begin --For 循环 FOR C_ROW IN C_EMP LOOP -- 更新清洗记录表 update CST_TW_RECORD set GRANT_STATE = 1,GRANT_FIRST_DATE=sysdate,GRANT_DATE=sysdate,SELLER_ID = 2012999991,GRANT_REMARK = 11 where CUST_ID=C_ROW.CUST_ID ; --更新客户表 update CST_CUSTOMER set APP_DATE = sysdate,PAST_DATE = sysdate,SELLER_ID = 2012999991,SELLER_DEPT_ID = 0001 where CUST_ID=C_ROW.CUST_ID ; --踢出客户 UPDATE CST_CUSTOMER_EXTEND SET PUB_STATE = 1 WHERE CUST_ID =C_ROW.CUST_ID ; end; end LOOP; end test; --执行存储过程 begin execute test ; end; ![图片说明](https://img-ask.csdn.net/upload/201709/08/1504853800_151544.png)

ORA-01000:超出打开游标的最大数

站点隔一段时间就会出现如标题如示的错误,哪位大神能告知下是什么原因及如何解决吗?

ORA-00604: 递归SQL级别1出现错误, ORA-02067:要求事务处理或保存回退点

报的错如题: ORA-00604: 递归SQL级别1出现错误 ORA-02067:要求事务处理或保存回退点 A服务器oracle建立dblink,存储过程的内容是:往B服务器中oracle的表里插入数据。 在客户端访问调用此存储过程的时候报以上错误。 目前为了报错不显示在客户端只能用rollback,但是这样的话数据就插入不进去了。 代码如下,请大神们帮帮忙: ``` --【游标查询/插入】 declare CURSOR c_job IS select ID,AuditP,AuditD,AuditIdea from LX_YW_ProjectInfoD2 where ToRow_guid=Row_guid and ID not in(select GUOCHENG_ID from TA_SP_GUOCHENG@LXZJJZW where INSTANCE_ID=IDKey); c_row c_job%rowtype; BEGIN for c_row in c_job loop select st_name into Audit_P from sys_staffdef where st_id=c_row.AuditP; -- insert into TA_SP_GUOCHENG@LXZJJZW (GUOCHENG_ID,INSTANCE_ID,TACHE_NO,TACHE_NAME,TRANSACTOR_NAME,TRANSACT_IDEA,TRANSACT_TIME,REMARK,CREATE_DATE,LAST_UPDATETIME,DATA_SOURCE,IS_EXCHANGE,SYSTEM_SOURCE) select ID,SHILI_ID,GC_Code,GC_Name,Audit_P,AuditIdea,AuditD,'',Now_Date,Now_Date,'XXXX','N','2' from LX_YW_ProjectInfoD2 where ToRow_guid=Row_guid and ID=c_row.ID; end loop; END commit; exception when others then rollback; ```

ora-01000 超出打开游标的最大数

这是一个老问题,网上也有很多关于这个问题的原因和解决方法,一般都是说在循环里面使用PrepareStatement或ResultSet后没有及时关闭引起的。 我现在的问题是,我使用的是Sptring的Jdbctemplate来执行查询操作(我也看了Jdbctemplate的代码,甚至将源代码复制出来自己再添加输出信息,确定PerpareStatement确实是有关闭,奇怪的是似乎执行关闭的次数要少于实际执行查询的次数),所以我不能自己调用方法关闭PrepareStatement或ResultSet,那问题应该怎么解决呢? 附功能需求: 查询某些数据点(最大300个左右),在某个时间范围内(最大1年左右),哪一天没有数据。例如:查询300个点,在2013-04-10至2013-04-17日这10天之中,有多少是没有数据的,如果没有任何数据,则返回300*10=3000条数据,且这3000条数据必须有时间,如第1条的内容是“点A在2013-04-10没有数据”,第2条的内容是“点B在2013-04-10没有数据”...第XX条是“点A在2013-04-11没有数据”,以此类推。 上面这需求,除了将具体的时间赋值到SQL语句的查询条件中之外,没有想出其他方法。如果查询1年的时间范围,那就要执行360+条SQL语句,就会出现上面提到的错误。

PL/SQL: ORA-00942: table or view does not exist

DECLARE CURSOR c_tab IS SELECT * FROM user_tables; v_row user_tables%ROWTYPE; v_count INTEGER; BEGIN OPEN c_tab; LOOP FETCH c_tab INTO v_row; EXIT WHEN c_tab%NOTFOUND; dbms_output.put_line(v_row.table_name); SELECT COUNT(*) INTO v_count FROM v_row.table_name; IF v_count<>0 THEN dbms_output.put_line(v_row.table_name||'is not null'); END IF; END LOOP; CLOSE c_tab; END; ORA-06550: line 12, column 52: PL/SQL: ORA-00942: table or view does not exist ORA-06550: line 12, column 12: PL/SQL: SQL Statement ignored 请各位大神指导,游标的值最终给了变量,但是说找不到这表

oracle使用游标将一个表数据插入另一个表中报错

对于学生选课表sc(sno,cno,grade),创建相同结构的新表sc1,并将sc数据全部加入到sc1,然后通过游标对sc1进行成绩更新: 成绩为: 80~100 更新为5; 60~80, 更新为3; 低于60分,更新为0; 更新之后对比sc和sc1,查看更新效果 ``` ```declare sc1_sno sc1.sno%type; sc1_cno sc1.cno%type; sc1_grade sc1.grade%type; cursor sc_cursor is select sno,cno,grade from sc; begin open sc_cursor; loop fetch sc_cursor into sc1_sno,sc1_cno,sc1_grade; exit when sc_cursor % notfound; if sc1_grade>=80 then sc1_grade:=5; else if sc1_grade<60 then sc1_grade:=0; else sc1_grade:=3; end if; end if; insert into sc1(sno,cno,grade) values (sc1_sno,sc1_cno,sc1_grade); end loop; close sc_cursor; commit; end; ``` ``` 错误报告: ORA-00001: 违反唯一约束条件 (STUDENT.SYS_C004830) ORA-06512: 在 line 21 00001. 00000 - "unique constraint (%s.%s) violated" *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured in DBMS MAC mode, you may see this message if a duplicate entry exists at a different level. *Action: Either remove the unique restriction or do not insert the key. ``` ```

python cx_Oracle 将sql使用游标执行编码问题

### 将python爬取到的信息使用format填入设定的sql中,再使用游标执行这串sql。 ``` sql = "INSERT INTO SPIDER_BJ_ATTRIBUTE(jj, hxjg, jzmj, szlc, JZSJ, cx, zxqk, id, fbsj ,zj, dj, sf, fwhx) VALUES(。。。。) print(sql) cursorObj.execute(sql) connectObj.commit() ``` 最终打印的sql是 ``` INSERT INTO SPIDER_BJ_ATTRIBUTE(jj, hxjg, jzmj, szlc, JZSJ, cx, zxqk, id, fbsj ,zj, dj, sf, fwhx) VALUES('沿湖小区 精装南北通透 独立两室 客厅通阳台 无税', '2室2厅','90m²', '中层(共6层)','2000年建造', '南北','精装修', ' 1525906959', '2018年12月08日','190万', '21111 元/m²', '57.00万', '普通住宅') ``` 但是最终执行游标时出现了错误 UnicodeEncodeError: 'gbk' codec can't encode character '\xb2' in position 145: illegal multibyte sequence 刚开始学python,基础也不是很好的我。在网上看了一些帖子也没有把问题解决。 请各位大佬帮忙看一下。

oracle 中如何将游标中循环查出的结果集放到另外一个临时表中

## --包头 CREATE OR REPLACE PACKAGE TESTPACKAGE IS TYPE MYCURSOR IS REF CURSOR; -- 定义游标变量 -- 定义过程,用游标变量作为返回参数 PROCEDURE GETRECORDS( RET_CURSOR OUT MYCURSOR , P_BIZTYPE VARCHAR2:=NULL,-- 业务类型 P_DATE_START VARCHAR2:=NULL,-- 起始时间 P_DATE_END VARCHAR2:=NULL, -- 结束时间 P_CUSTOM_CODE VARCHAR2:=NULL--关区代码 ); END TESTPACKAGE; ## --包体 CREATE OR REPLACE PACKAGE BODY TESTPACKAGE IS /*过程体*/ PROCEDURE GETRECORDS( RET_CURSOR OUT MYCURSOR , --返回值 P_BIZTYPE VARCHAR2:=NULL,-- 业务类型 P_DATE_START VARCHAR2:=NULL,-- 起始时间 P_DATE_END VARCHAR2:=NULL, -- 结束时间 P_CUSTOM_CODE VARCHAR2:=NULL--关区代码 ) AS --ROW_DEPT CUR_CONNECTNO%ROWTYPE; --V_SQL VARCHAR2(3000);--sql语句 DAN VARCHAR2(2000); BEGIN --CUR_CONNECTNO 该游标用于存放每个业务查询出的结果集 --A业务 IF P_BIZTYPE='A' THEN CURSOR CUR_CONNECTNO IS SELECT A.ID AS GJ_NO FROM GJ_A A WHERE TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END; END IF; --点击查询全部业务类型时,连接 /* IF P_BIZTYPE='' THEN V_SQL+=' UNION ALL ' END IF;*/ --B业务 IF P_BIZTYPE='B' THEN CURSOR CUR_CONNECTNO IS SELECT A.NO AS GJ_NO FROM GJ_B A WHERE A.I_E_MARK='1' AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END; END IF; --M业务 IF P_BIZTYPE='M' THEN CURSOR CUR_CONNECTNO IS SELECT A.NO AS GJ_NO FROM GJ_M A WHERE SUBSTR(A.NO,3,1)='M' AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END; END IF; /*IF P_BIZTYPE='' THEN V_STR+=' UNION ALL ' END IF;*/ --G IF P_BIZTYPE='G' THEN CURSOR CUR_CONNECTNO IS SELECT A.NO AS GJ_NO FROM GJ_G A WHERE TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END; END IF; /*IF P_BIZTYPE='' THEN V_STR+=' UNION ALL ' END IF;*/ --E 业务 IF P_BIZTYPE='E' || P_BIZTYPE='' THEN CURSOR CUR_CONNECTNO IS SELECT A.NO AS GJ_NO FROM GJ_E A WHERE A.MARK='2' AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END; END IF; -- 创建临时表 /* CREATE GLOBAL TEMPORARY TABLE TEMP_TBL(gj_no VARCHAR2(30),COL_A VARCHAR2(30),COL_A VARCHAR2(30)) ON COMMIT DELETE ROWS ;*/ FOR HAHA IN CUR_CONNECTNO LOOP --根据上述业务查出的数据 再在次记录表中是否 存在 ,若存在就把数据 取出来 -- 取出来 想保存到临时表中。 该怎么写 SELECT * FROM RD_Z Z WHERE BIZ_TYPE = P_BIZTYPE AND Z.NO=HAHA.GJ_NO ; END LOOP; --最后想用该游标来存放临时表中的数据集 来返回去 --OPEN RET_CURSOR FOR END GETRECORDS; END TESTPACKAGE;

{"ORA-06550: PLS-00306: 调用 '**' 时 错误 ORA-06550:

{"ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'PROC_GETDATA' 时参数个数或类型错误 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored "} 这是我的程序调用代码 ''' <summary> ''' 获取数据的万能存储过程,查询返回结果集的存储过程调用 ''' Author:Jones.Vale ''' Datetime:20160127 ''' </summary> ''' <param name="strProcName">存储过程名</param> ''' <param name="pa">传入的参数数组,第一列为参数名,第二列为参数值</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ExecStoredProcData(ByVal strProcName As String, ByVal objHashtable As Hashtable) As DataSet Dim mydt As New DataSet Dim myCommand As OracleCommand Dim objOracleParameter As IDictionaryEnumerator = objHashtable.GetEnumerator() Dim iii As Integer iii = 30 myCommand = myORACLEConnection.CreateCommand While objOracleParameter.MoveNext() Dim tempValue As String = TypeName(objOracleParameter.Value) Dim myParameter As New OracleParameter '定义一个参数 If tempValue = "Date" Then myParameter.DbType = DbType.Date '赋参数类型 ElseIf tempValue = "Integer" Then myParameter.DbType = DbType.Int32 '赋参数类型 ElseIf tempValue = "Double" Or tempValue = "Float" Or tempValue = "NUMBER" Then myParameter.DbType = DbType.Double '赋参数类型 Else myParameter.DbType = DbType.String '赋参数类型 End If myParameter.ParameterName = objOracleParameter.Key myParameter.Value = objOracleParameter.Value myCommand.Parameters.Add(myParameter) '加入参数列表 End While myCommand.CommandText = strProcName myCommand.CommandType = CommandType.StoredProcedure Dim dataAdapter As New OracleDataAdapter dataAdapter.SelectCommand() = myCommand dataAdapter.Fill(mydt) Return mydt End Function 以下是在plSQL中执行测试结果没有任何问题。 存储过程代码: CREATE OR REPLACE PROCEDURE PROC_GetData ( v_dateTime date, v_tiger number, p_cur out SYS_REFCURSOR---游标返回 ) as v_sql varchar2(2000) := ' '; begin if v_tiger = 2 then v_sql :='select t.branchno,sum(t.reportloss)/10000 as RV from bhresvfee.t_resv_claim_bhsys t where t.insuranceclass like (''7%'') and casestate<>''9'' group by t.branchno order by t.branchno'; end if; OPEN p_cur FOR v_sql; end PROC_GetData; 高手请指点一下这个问题是什么引起的。怎么处理才有效,谢谢!

oracle中触发器与游标和包的联合问题。

1.创建临时表stu_temp。(临时表结构要和关联表结构一致) 2.创建一个包,包含两个存储过程,stu_insert用于在行级触发器中调用,往stu_temp临时表中装载更新或插入的记录。而stu_count用于在语句级触发器中检查人数是否超限。 3.创建行级触发器stu_in,目的是把更新后的记录插入stu_temp。 4.创建语句级触发器stu_cou,使用游标从stu_temp中逐条读取更新或插入的记录,取sno,在关联表stu中查找所有匹配学生的人数进行统计。若人数超过5人则抛出异常。如果检查通过,则清空临时表。 **基表与临时表已经创建好,请问后续问题的语句该怎样写?诚谢啦~** 语句如下: create table stu(sno varchar2(6) not null,sname varchar2(6) not null,ssex varchar2(2)not null,sage number(6) not null); create clobal temporary table stu_temp(sno varchar2(6) not null,sname varchar2(6) not null,ssex varchar2(2)not null,sage number(6) not null);

oracle怎么把游标查询的结果再以表格显示出来

DECLARE CURSOR post_cursor IS SELECT * FROM Y_FORUM_POST; CURSOR postanswer_cursor(ppost_id NUMBER) IS SELECT * FROM Y_FORUM_POST_ANSWER WHERE FORUM_POST_ID=ppost_id; BEGIN FOR p IN post_cursor LOOP DBMS_OUTPUT.PUT_LINE(p.FORUM_POST_ID || ' ' || p.TITLE); FOR a IN postanswer_cursor(p.FORUM_POST_ID) LOOP DBMS_OUTPUT.PUT_LINE(a.ANSWER_CONTENT); END LOOP; END LOOP; END; ![dbms输出的结果图片说明](https://img-ask.csdn.net/upload/201610/29/1477746493_674492.png)

循环更新表老提示ORA-06550 第8 行 第57列......

DECLARE CURSOR SEC IS SELECT OWNER,TABLE_NAME from TEMP_TABLE ; TABLE_NAME_ VARCHAR2(50); BEGIN FOR SEC_1 IN SEC loop TABLE_NAME_:=trim(sec_1.owner)||'.'||trim(sec_1.table_name); update temp_table set rownum_=(select count(*) from TABLE_NAME_) WHERE TABLE_NAME=SEC_1.TABLE_NAME and owner=sec_1.owner; END LOOP; COMMIT; END;

oracle存储过程使用游标的问题

create or replace procedure test3( templete_id in varchar2 ) as t_id_tmp varchar2(50); ty_id_tmp varchar2(50); cursor type_cur is select t1.id as type_id,t1.type_name from t_type t1,t_templete_link t2,t_templete t3 where t1.id = t2.type_id and t2.templete_id = t3.id and t3.id = templete_id; -- n number; begin select sys_guid() into t_id_tmp from dual; --复制模板信息 insert into t_templete select t_id_tmp as id, t.templete_name from t_templete t where t.id = templete_id; commit; dbms_output.put_line(templete_id); --复制类别信息 -- declare begin for type_rec in type_cur loop -- n:=n+1; -- dbms_output.put_line(1); select sys_guid() into ty_id_tmp from dual; insert into t_type select ty_id_tmp as id, type_rec.type_name from dual; -- from t_type t2 -- where t2.id = type_rec.type_id; -- commit; insert into t_templete_link select sys_guid() as id,t_id_tmp as TEMPLETE_ID ,ty_id_tmp as type_id from dual; -- t_templete_link t2 --where t2.templete_id = templete_id; commit; end loop; end; --dbms_output.put_line(t_id_tmp); exception when others then Rollback; end test3; 如果我传入的参数templete_id=1,我的t_cur循环的时候循环了3次。 但如果游标中的变变量templete_id 替换成 ‘1’就循环2次 这才是正常结果为什么

ORACLE 存储过程 关于游标循环从一个表COPY到另一个表插入问题

``` create or replace procedure insertspzl as is_tb number(2):=1;-- 1 已经同步 2 未同步 3 修改状态 spbh VARCHAR2(255); sccj VARCHAR2(255); sccjpd VARCHAR2(255); --判断生产厂家是否存在 变量 jxname VARCHAR2(255); jxnamepd VARCHAR2(255); spfl VARCHAR2(255); jyfw VARCHAR2(255); cursor cur is select trim(商品编号) spbh,trim(生产厂商) sccj,trim(剂型) jx,trim(商品类型) spfl,trim(商品类型) jyfw from 商品资料@TEST; begin -- 增加资料处理字段 -- alter table zl_spzlb add (bzdw VARCHAR2(255)); -- alter table zl_spzlb add (sccj VARCHAR2(255)); -- alter table zl_spzlb add (jx VARCHAR2(255)); -- alter table zl_spzlb add (spfl VARCHAR2(255)); -- For 循环逐条插入记录 for temp in cur loop spbh :=temp.spbh; sccj :=temp.sccj; jxname :=temp.jx; spfl :=temp.spfl; jyfw :=temp.jyfw; select trim(是否同步) into is_tb from 商品资料@TEST where trim(商品编号)=spbh ; Dbms_Output.put_line('--打印is_tb--'||is_tb||'--编号--'||spbh); -- If 判断单条条件处理 if is_tb =1 then Dbms_Output.put_line('--发现未同步商品--'||spbh); Dbms_Output.put_line('--厂家--'||sccj); Dbms_Output.put_line('开始插入数据'); --插入商品资料 insert into zl_spzlb (resid,bh,spbh,name,sptym,slv,pzwh,spcd,cctj,is_zdyh,is_ty,bzdw,spgg,sccj,jx,spfl) select seq_acl_res_resid.nextval,trim(商品编号),trim(商品编号),trim(商品名称),trim(通用名), trim(税率),trim(批准文号),trim(产地), decode(trim(储存条件),'密封,置阴凉处','阴凉、暗凉(密闭,遮光)','密封','阴凉、暗凉(密闭,遮光)', '密封,置阴凉处(不超过20°)','阴凉、暗凉(密闭,遮光)','遮光','阴凉、暗凉(密闭,遮光)','阴凉', '阴凉、暗凉(密闭,遮光)','常温','常温(干燥0℃-30℃)','冷藏','冷藏(2℃-10℃)','其他'), decode(trim(养护措施),'普通养护',2,'重点养护',1),decode(trim(是否停用),'否',2,'是',1),trim(单位), trim(规格),trim(生产厂商),trim(剂型), trim(商品类型) from 商品资料@TEST where trim(商品编号)=spbh; --插入包装资料 Dbms_Output.put_line('--商品--'||spbh); insert into zl_bzggzlb(bzid,spid,jlgg,is_hd,name) select seq_zl_bzggzlb_bzid.nextval,a.resid,1,1,a.bzdw from zl_spzlb a where a.spbh=spbh; --更新 update zl_spzlb a set (a.lsbzid,a.pfbzid)=(Select b.bzid,b.bzid From zl_bzggzlb b Where a.resid=b.spid and a.spbh=spbh) where a.spbh =spbh; end loop; commit; --for 循坏结束 end insertspzl; ``` 游标循环不允许再 遍历游标的时候 有insert的操作,并且执行了commit 但是如果commit 放在循化外面 会在获取 商品资料@TEST 第二行记录插入时候 --插入包装资料 在这一块把第一次生产的数据带出来重复插入 导致 --更新 这一块没办法进行 返回多行 如何去隔离上一次循环 不影响下一次并且最后提交都提交 求大大们指教

oracle存储过程返回游标集。。。写了半天没搞定,oracle大神帮帮我

需要查询某个表(tablename)参数,一段时间(开始日期到结束日期)的count数。 我自己想法是声明一个游标来遍历开始日期到结束日期,把每一天的count和这天的日期都装到另一个游标里(我不知道怎么写出返回游标装个对象这种)。最烦的就是有个条件需要把18点以后的数据算到第二天。也就是说如果数据时间为2017/8/22 18:00,那这条数据的时间应该是2017/8/23。所以很麻烦,拜托oracle大神帮帮我!!! 反正最后的结果是: 2017-8-19 52 2017-8-20 45 2017-8-21 56 2017-8-22 12 这个时间也不是固定的,也是参数,最好还是排下序,谢谢!!!

触发器中关于insert into ... select ...字段数据未插入的问题

如图所示,我是在触发器里写的,测试过程中取出执行的sql,在pl/sql里执行插入数据是没问题的,程序在执行的时候该表字段只插入了s_person_unid,请问是什么原因?

mysql存储过程游标遍历表数据报错,1328 Incorrect number of FETCH variables

下面是整个存储过程,我自己查了数量一致类型一致,就是不知道它为什么报这个错误,还是说我写的这个游标有问题? ``` DELIMITER $$ DROP PROCEDURE IF EXISTS `PRODUCTINVENTORY_SYNC` $$ CREATE PROCEDURE PRODUCTINVENTORY_SYNC() BEGIN DECLARE tmpId INT(11); DECLARE storeCode VARCHAR(50); -- 仓库编码 DECLARE storeName VARCHAR(80); -- 仓库名称 DECLARE productCode VARCHAR(60); -- 商品编码 DECLARE productSubno VARCHAR(40); -- 商品条码 DECLARE productName VARCHAR(80); -- 商品名称 DECLARE supplierCode VARCHAR(60); -- 供应商编码 DECLARE supplierName VARCHAR(80); -- 供应商名称 DECLARE productTypeCode VARCHAR(40); -- 商品类型编码 DECLARE productTypeName VARCHAR(80); -- 商品类型名称 DECLARE productBrandCode VARCHAR(60); -- 商品品牌编码 DECLARE productBrandName VARCHAR(80); -- 商品品牌名称 DECLARE purchasePrice DECIMAL(10,2); -- 进货价 DECLARE retailPrice DECIMAL(10,2); -- 零售价 DECLARE memberPrice DECIMAL(10,2); -- 会员价 DECLARE productStock INT(11); -- 商品库存 DECLARE c_count INT; -- 遍历数据结束标志 DECLARE done INT DEFAULT FALSE; -- 设置游标 DECLARE cur_productInventorys CURSOR FOR SELECT tmp_id store_code, store_name, product_code, product_subno, product_name, supplier_code, supplier_name, product_type_code, product_type_name, product_brand_code, product_brand_name, purchase_price, retail_price, member_price, product_stock FROM product_inventory_tmp_t t WHERE t.processingStatus = 2; -- 将结束标志绑定到游标 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; DELETE it FROM product_inventory_t it WHERE NOT EXISTS (SELECT 1 FROM product_inventory_tmp_t pt WHERE it.product_code = pt.product_code AND it.product_subno = pt.product_subno and it.store_code = pt.store_code AND pt.processingStatus = 2); -- 打开游标 OPEN cur_productInventorys; -- 遍历 read_loop: LOOP -- 设置给对应字段 FETCH cur_productInventorys INTO tmpId,storeCode,storeName,productCode,productSubno,productName,supplierCode,supplierName,productTypeCode,productTypeName,productBrandCode,productBrandName,purchasePrice,retailPrice,memberPrice,productStock; IF done THEN -- 判断是否继续循环 LEAVE read_loop; -- 结束循环 END IF; SELECT count(1) INTO c_count FROM product_inventory_t pit WHERE pit.product_code = productCode AND pit.product_subno = productSubno AND pit.store_code = storeCode; IF c_count = 0 THEN INSERT INTO product_inventory_t ( `store_code`, `store_name`, `product_code`, `product_subno`, `product_name`, `supplier_code`, `supplier_name`, `product_type_code`, `product_type_name`, `product_brand_code`, `product_brand_name`, `purchase_price`, `retail_price`, `member_price`, `product_stock`, `create_time`, `update_time` ) VALUES ( storeCode, storeName, productCode, productSubno, productName, supplierCode, supplierName, productTypeCode, productTypeName, productBrandCode, productBrandName, purchasePrice, retailPrice, memberPrice, productStock, `new()`, `new()`); ELSE UPDATE product_inventory_t SET `store_code`= storeCode, `store_name` = storeName, `product_code` = productCode, `product_subno` = productSubno, `product_name` = productName, `supplier_code` = supplierCode, `supplier_name` = supplierName, `product_type_code` = productTypeCode, `product_type_name` = productTypeName, `product_brand_code` = productBrandCode, `product_brand_name` = productBrandName, `purchase_price` = purchasePrice, `retail_price` = retailPrice, `member_price` = memberPrice, `product_stock` = productStock, `update_time` = now() WHERE product_code = productCode AND product_subno = productSubno AND store_code = storeCode; END IF; UPDATE product_inventory_tmp_t SET `processingStatus` = 4 where tmp_id = tmpId; END LOOP read_loop; -- 关闭游标 CLOSE cur_productInventorys; DELETE FROM product_inventory_tmp_t WHERE `processingStatus` = 4; END $$ DELIMITER ```

oracle 定义游标的时候可以使用变量作为表的名字吗?

<p>我的目的就是希望可以在存储过程的参数中传递表的名称,然后在存储过程内定义游标的时候,根据表的名字来查询,这个可以做到吗?如下:</p> <p>create or replace procedure case_to_province(table_name in varchar2, id_name in varchar2) as<br>        cursor cur is<br>       select * from table_name;</p> <p>begin</p> <p>        for rec in cur loop</p> <p>……</p> <p>我希望可以实现类似这种语句片段的效果,当然,上面的写法是错误的。还请大家给与帮助,非常感谢。</p>

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#对文件改写权限 c#中tostring c#支付宝回掉 c#转换成数字 c#判断除法是否有模 c# 横向chart c#控件选择多个 c#报表如何锁定表头 c#分级显示数据 c# 不区分大小写替换
立即提问
相关内容推荐