ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后发现使用自治事务 可解决 。
目的: 输入查询,清空数据表并返回清空条数(可不要求返回)。
一:创建类型
create or replace type tab_desc as table of varchar(200);
二:创建清空函数
create or replace function func_trunc_tab(l_cursor in sys_refcursor) return tab_desc pipelined -- parallel_enable(partition l_cursor by any) is v_schma varchar2(200); --对象名 v_tabname varchar2(200); --表名 v_row_count number := 0; v_total_count number := 0; PRAGMA AUTONOMOUS_TRANSACTION; begin loop fetch l_cursor into v_schma, v_tabname; exit when l_cursor%notfound; execute immediate 'select count(1) from ' || v_schma || '.' || v_tabname into v_row_count; v_total_count := v_total_count + v_row_count; pipe row('trancate table ' || v_schma || '.' || upper(v_tabname)); execute immediate 'truncate table ' || v_schma || '.' || v_tabname; end loop; pipe row('Delete ' || v_total_count || ' Rows'); close l_cursor; return; exception when others then if l_cursor%isopen then close l_cursor; end if; raise; end func_trunc_tab;
调用:(清空当前用户里所有以'TMP' 开头的表,下面的sql语句就是函数的参数
SELECT * FROM TABLE(FUNC_TRUNC_TAB(CURSOR (SELECT USER AS OWNER, OBJECT_NAME FROM USER_OBJECTS T WHERE T.OBJECT_TYPE = 'TABLE' AND T.OBJECT_NAME LIKE 'TMP%')));
相关推荐
在Oracle 10g数据库系统中,开发人员可以利用PL/SQL语言来创建复杂的存储过程、函数以及包,以执行数据库操作。其中,一个重要的功能是能够创建返回游标类型的函数,这种函数允许用户从数据库中检索并返回一组记录,...
本资源“Oracle游标使用案例大全”提供了一系列实用的示例,旨在帮助学习者深入理解和掌握Oracle游标的用法。 1. **游标的基本概念** - 游标(Cursor):它是一个数据库系统中的结构,用于存储执行SQL查询后的结果...
- 在Oracle PL/SQL中,游标常用于存储过程和函数,实现复杂的业务逻辑。 - 游标可以作为参数传递,或者作为存储过程的输出结果。 9. **游标处理异常** - 应适当地处理游标相关的异常,例如NO_DATA_FOUND和TOO_...
通过理解并熟练运用Oracle的存储过程和游标,开发者可以构建高效、模块化的数据库应用,提高代码复用性和数据库性能。在实际开发中,应根据需求合理选择使用函数或存储过程,并灵活运用游标处理复杂查询和结果集。
- **循环游标**(Ref Cursor):可以作为参数传递给存储过程或函数,实现游标数据的动态返回。 3. **作用**: - **数据检索**:从表或视图中获取数据。 - **数据更新**:基于查询结果更新数据库中的数据。 - **...
1. **隐式游标**:在PL/SQL中,当我们执行DML操作(如INSERT、UPDATE、DELETE)时,Oracle会自动创建隐式游标。我们可以使用隐式游标的几个内置属性来检查操作状态,例如: - `%FOUND`:如果上一个DML操作影响了...
本资源"oracle函数大全及存储过程语法.rar"显然是一个关于Oracle函数和存储过程的详细指南,涵盖了各种常用和高级的函数以及存储过程的编写和使用方法。 一、Oracle函数 Oracle提供了丰富的内置函数,包括数值函数...
总的来说,Oracle数据库的游标机制为开发者提供了强大的数据处理能力,使得在PL/SQL环境中能够更有效地管理数据和执行复杂的业务逻辑。无论是简单的DML操作还是复杂的查询处理,游标都是不可或缺的工具。通过熟练...
这个函数通过打开一个游标并执行查询(在这里是选择`cf_news`表中的`id`和`title`列,按`id`排序)来实现。执行`open`语句后,函数将返回这个打开的游标。 然后,我们定义了一个名为`getemps`的过程,它接受一个`in...
在VB(Visual Basic)中调用Oracle函数并获取返回的数据集是常见的数据库操作。这个例子展示了如何使用VB来调用Oracle存储过程,该过程返回一个游标类型(REF CURSOR),进而填充ADODB.Recordset对象。 首先,让我们...
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...
游标变量,可以将游标作为参数传递给过程或函数;以及游标的循环处理,结合PL/SQL块实现复杂的逻辑控制。 游标的使用需要注意效率问题,因为频繁的游标操作可能导致性能下降。在处理大量数据时,应考虑使用批处理或...
在Oracle数据库中,一种新型的攻击方式——**游标注入**,允许攻击者在无需创建过程或函数的情况下执行任意SQL语句。这种攻击方法不仅降低了攻击门槛,也对现有的安全评估机制提出了挑战。 #### Oracle游标注入概述...
在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的结果返回或存储过程的输出参数来传递结果集。为了能够使用 Refcursor,首先需要定义一个新的类型来表示它: - **弱类型派生**:这种...
Oracle存储过程、函数和程序包是数据库管理系统中的一种机制,允许开发者在数据库服务器上创建和执行自定义的代码,以提高数据库的性能和安全性。本文将对Oracle存储过程、函数和程序包进行详细的介绍,并提供相关的...
游标是Oracle数据库中处理数据的强大工具,通过理解和掌握不同类型游标的使用,可以更灵活地进行数据处理,提高应用程序的性能和功能。无论是简单的数据检索还是复杂的事务处理,游标都能提供必要的支持。希望本文...
在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...
Oracle数据库是世界上最广泛使用的...Oracle函数和存储过程的掌握,能够帮助数据库管理员和开发人员更高效地操作和管理数据库,提高代码的复用性和可维护性。理解并熟练运用这些语法是提升Oracle数据库技能的关键步骤。
动态SQL允许在运行时构建和执行SQL语句,这对于处理不确定的或用户定义的查询非常有用。在动态SQL中使用游标可以处理动态生成的结果集。 6. **存储过程中的游标变量** (6.存儲過程中的游標變量.txt) 在存储过程中...
本资源包“ORACLE学习资料大全”涵盖了Oracle数据库的关键知识点,包括存储过程、索引、函数、查询优化、分页查询、联接操作、游标以及基础SQL语法等内容,对于想要深入学习Oracle的人来说是一份宝贵的资源。...