create or replace function F_DEALWITH_LSBD(YDYF varchar2) return varchar2 is TYPE ref_type IS REF CURSOR; P_YDYF varchar2(8);--年度月份 V_SQL_QUERY CLOB;--查询未返写的数据的sql V_NSRDZDAH varchar2(30); V_FKJG_BH varchar2(32); V_SQL_UPDATE CLOB;--返写更新sql cur ref_type;--动态游标 pragma autonomous_transaction; begin P_YDYF := YDYF; V_SQL_QUERY := 'select mx.nsrdzdah,nvl(k.fkjg_bh,'''') from LDMT04_LSBDDZ_HZ h,fxyd_rwmx mx,fxyd_ydjgfk k where h.dsnsrzhdah = mx.nsrdzdah and mx.rwpc_bh is not null and mx.rwtczt_dm = ''YXF'' and mx.hxcl_dm = ''YDCZ'' and mx.xxly_dm = ''00'' and exists(select 1 from fxfx_smmx m,FXGL_FXSB_MXKZSX kz where m.fxmx_bh = mx.fxxx_bh and kz.mx_dm = m.mxdm and kz.tsfx_lx = ''02'') and h.sfczcy is null and mx.fxxx_bh = k.fxxx_bh(+) and h.ydyf = '''||P_YDYF||''''; open cur for V_SQL_QUERY; FETCH cur into V_NSRDZDAH,V_FKJG_BH; while cur%FOUND LOOP if V_FKJG_BH='' THEN V_SQL_UPDATE:='update LDMT04_LSBDDZ_HZ set sfczcy=''Y'',sfycl=''N'' where dsnsrzhdah='''||V_NSRDZDAH||''' and ydyf='''||P_YDYF||''''; ELSE V_SQL_UPDATE:='update LDMT04_LSBDDZ_HZ set (sfczcy,sfycl,BJCJS,BJCJSZNJ, BJJYFFJ,BJJYFFJZNJ,BJDFJYFJ,BJDFJYFJZNJ,BJFK,CYYY,FKLRRY,FKRQ,BZ) = (select ''Y'', ''Y'', sum(decode(z.zsxm_dm, ''10109'',decode(z.zspm_dm,''101099900'',null,''101099901'',null,''101099961'',null,z.rksk),null)), sum(decode(z.zsxm_dm, ''10109'',decode(z.zspm_dm,''101099900'',z.rksk,null),null)), sum(decode(z.zsxm_dm, ''10381'',decode(z.zspm_dm,''103819900'',null,''103819901'',null,''103819961'',null,z.rksk),null)), sum(decode(z.zsxm_dm, ''10381'',decode(z.zspm_dm,''103819900'',z.rksk,null),null)), sum(decode(z.zsxm_dm, ''10386'',decode(z.zspm_dm,''103869900'',null,''103869901'',null,z.rksk),null)), sum(decode(z.zsxm_dm,''10386'',decode(z.zspm_dm,''103869900'',z.rksk,null),null)), sum(decode(z.zsxm_dm||''!''||z.zspm_dm, ''10109!101099901'',z.rksk,''10109!101099961'',z.rksk, ''10381!103819901'',z.rksk,''10109!103819961'',z.rksk, ''10386!103869901'',z.rksk, null)), '''', max(k.YDCZRY_MC), to_char(max(k.FKSJ),''yyyy-mm-dd''), '''' from fxyd_ydjgfk_zs z, fxyd_ydjgfk k where k.fkjg_bh = z.fkjg_bh(+) and k.fkjg_bh = '''||V_FKJG_BH||''' group by k.fkjg_bh) where dsnsrzhdah='''||V_NSRDZDAH||''' and ydyf='''||P_YDYF||''''; END IF; --执行更新 EXECUTE IMMEDIATE V_SQL_UPDATE; commit; FETCH cur into V_NSRDZDAH,V_FKJG_BH; END LOOP; CLOSE cur; return ''; end;
pragma autonomous_transaction;是关键加了这个提供了一个自治事物就可以在执行function时执行dml语句了
select f_dealwith_lsbd('?') from dual;
相关推荐
- 存储过程没有这个限制,它可以自由地包含DML语句,并且通常用于执行复杂的业务逻辑。 3. **调用方式**: - 函数可以直接在表达式中调用,如`x := func();`或`SELECT func() FROM dual;`,因为函数返回值可以...
本文将深入探讨Oracle PL/SQL基础语句的编写,帮助你更好地理解和运用这一语言。 1. **变量声明**: 在PL/SQL中,我们首先需要声明变量来存储数据。变量的声明通常包括数据类型和变量名,如`DECLARE var_name ...
- `CREATE TRIGGER`:当特定的DML操作(INSERT,UPDATE,DELETE)发生时,自动执行的代码段,用于实现业务规则的自动应用。 11. **权限和角色**: - `GRANT`和`REVOKE`:用于授予和撤销用户对数据库对象的操作...
12. **触发器**:触发器是一种数据库对象,会在特定的DML事件(INSERT, UPDATE, DELETE)发生时自动执行。 13. **分区表**:对于大型表,可以使用分区技术提高查询性能,如范围分区、列表分区、哈希分区等。 14. *...
- 隐式游标则是由PL/SQL自动管理,通常在执行DML语句或返回单条记录的查询时使用。PL/SQL会自动打开、处理和关闭游标。 2. **Oracle与SQL Server的区别**: - 平台差异:Oracle可跨多个操作系统,而SQL Server...
与DDL不同,执行DML语句后,必须显式执行COMMIT命令来提交事务。 3. 动态性能表:这些表在实例启动时创建,用于存储关于实例性能的信息,如连接信息、I/O统计、初始化参数值等。通过查询这些表,DBA可以监控和优化...
### 如何在Oracle中查看正在执行的SQL语句及锁信息 #### 一、查看当前锁定情况 在Oracle数据库管理中,了解当前存在的锁是非常重要的,可以帮助我们更好地诊断和解决问题。下面将详细介绍如何查看Oracle中的锁信息...
2. Oracle的自动跟踪(autotrace)用于跟踪SQL语句的执行情况。 3. Oracle的SQL优化器(CBO)使用统计信息来选择最优的执行计划。 4. Oracle的行级锁定(row-level locking)用于保证并发事务的正确性。 5. ...
3. DML语句:了解INSERT、UPDATE、DELETE语句,用于添加、修改和删除数据。 4. 创建和修改表结构:学习CREATE TABLE、ALTER TABLE等语句,以创建新表或修改现有表的结构。 5. 视图:理解视图的概念,学习如何创建和...
- 语句级触发器:在整个SQL语句执行前后触发。 - DDL触发器:在执行数据定义语言(DDL)操作时触发。 - **触发器管理**:使用ALTER TRIGGER语句启用、禁用触发器,使用DROP TRIGGER语句删除触发器。 #### 专题九...
1. SQL 执行计划:了解 SQL 语句的执行计划,可以帮助我们更好地理解 SQL 语句的执行过程和优化方法。 2. SQL 调整:了解 SQL 调整的方法,可以帮助我们更好地提高查询性能。 3. 执行计划的稳定性:了解执行计划的...
与DDL不同,执行DML语句后,需要显式执行`COMMIT`命令来提交事务。 3. 动态性能表:这些表在实例启动时创建,用于存储关于实例性能的信息,如连接信息、I/O统计、初始化参数值等。 4. 存储过程(Procedure)与函数...
通过以上的介绍,我们可以了解到Oracle存储过程的定义、使用方法、变量的定义与声明、游标的使用、循环控制语句、过程控制语句、存储过程的创建和异常处理、触发器的概念与使用、JOB的管理以及SQL优化策略等多个方面...
13. **LAST_SQL_FUNCTION_CODE**:返回最后一次执行的SQL语句的功能代码。 在提供的示例中,创建了一个名为dml_sql的存储过程,它演示了如何使用DBMS_SQL来动态执行一个SQL查询。过程接收一个参数,然后构造一个...
CREATE PROCEDURE语句用于创建存储过程,而CREATE FUNCTION创建用户自定义函数。它们可以提高代码重用性,提升性能,并提供业务逻辑封装。 6. 事务处理: 事务是数据库操作的逻辑单位,具有ACID属性(原子性、一致...
当使用`EXECUTE IMMEDIATE`执行DML语句时,可以通过`USING`子句传递绑定变量。 - **示例**: ```sql DECLARE l_dept_name VARCHAR2(20) := 'Testing'; l_loc VARCHAR2(10) := 'Dubai'; BEGIN EXECUTE ...
最后,Oracle SQL还支持存储过程和函数,它们是预编译的SQL和PL/SQL代码块,可以重复使用并执行复杂的业务逻辑。DECLARE, BEGIN, END关键字用于定义PL/SQL块,PROCEDURE和FUNCTION分别用于创建过程和函数。 总的来...
4. 调用JAVA存储过程:一旦JAVA存储过程被发布,就可以在SQL语言的DML语句、PL/SQL块或PL/SQL子程序中调用它。调用的方法与调用其他PL/SQL存储过程相同,可以通过SQL的CALL语句在SQLPlus或数据库触发器中进行调用。 ...
文档可能涵盖了CREATE PROCEDURE、CREATE FUNCTION、BEGIN/END语句块、参数声明、异常处理等基础语法。 4. **oracle 存储过程代码.sql**:这个文件可能包含实际的存储过程示例代码,读者可以通过这些实例理解存储...
3. 数据操纵:Oracle SQL的DML(数据操纵语言)包括`INSERT`、`UPDATE`和`DELETE`命令,用于添加、修改和删除数据。此外,`MERGE`语句是Oracle特有的,它结合了插入和更新的功能,对数据进行条件操作。 4. 视图:...