`
MyDicta
  • 浏览: 19234 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 函数执行修改和游标传递

阅读更多

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%')));

 

 

0
0
分享到:
评论

相关推荐

    oracle10g 函数返回游标类型

    在Oracle 10g数据库系统中,开发人员可以利用PL/SQL语言来创建复杂的存储过程、函数以及包,以执行数据库操作。其中,一个重要的功能是能够创建返回游标类型的函数,这种函数允许用户从数据库中检索并返回一组记录,...

    Oracle游标使用案例大全

    本资源“Oracle游标使用案例大全”提供了一系列实用的示例,旨在帮助学习者深入理解和掌握Oracle游标的用法。 1. **游标的基本概念** - 游标(Cursor):它是一个数据库系统中的结构,用于存储执行SQL查询后的结果...

    Oracle 游标使用大全

    - 在Oracle PL/SQL中,游标常用于存储过程和函数,实现复杂的业务逻辑。 - 游标可以作为参数传递,或者作为存储过程的输出结果。 9. **游标处理异常** - 应适当地处理游标相关的异常,例如NO_DATA_FOUND和TOO_...

    Oracle_的存储过程及游标

    通过理解并熟练运用Oracle的存储过程和游标,开发者可以构建高效、模块化的数据库应用,提高代码复用性和数据库性能。在实际开发中,应根据需求合理选择使用函数或存储过程,并灵活运用游标处理复杂查询和结果集。

    oracle游标优化

    - **循环游标**(Ref Cursor):可以作为参数传递给存储过程或函数,实现游标数据的动态返回。 3. **作用**: - **数据检索**:从表或视图中获取数据。 - **数据更新**:基于查询结果更新数据库中的数据。 - **...

    oracle中游标的使用

    1. **隐式游标**:在PL/SQL中,当我们执行DML操作(如INSERT、UPDATE、DELETE)时,Oracle会自动创建隐式游标。我们可以使用隐式游标的几个内置属性来检查操作状态,例如: - `%FOUND`:如果上一个DML操作影响了...

    oracle函数大全及存储过程语法.rar

    本资源"oracle函数大全及存储过程语法.rar"显然是一个关于Oracle函数和存储过程的详细指南,涵盖了各种常用和高级的函数以及存储过程的编写和使用方法。 一、Oracle函数 Oracle提供了丰富的内置函数,包括数值函数...

    oracle游标的使用

    总的来说,Oracle数据库的游标机制为开发者提供了强大的数据处理能力,使得在PL/SQL环境中能够更有效地管理数据和执行复杂的业务逻辑。无论是简单的DML操作还是复杂的查询处理,游标都是不可或缺的工具。通过熟练...

    利用游标返回结果集的的例子(Oracle 存储过程).doc

    这个函数通过打开一个游标并执行查询(在这里是选择`cf_news`表中的`id`和`title`列,按`id`排序)来实现。执行`open`语句后,函数将返回这个打开的游标。 然后,我们定义了一个名为`getemps`的过程,它接受一个`in...

    VB 调用 Oracle 函数返回数据集的例子

    在VB(Visual Basic)中调用Oracle函数并获取返回的数据集是常见的数据库操作。这个例子展示了如何使用VB来调用Oracle存储过程,该过程返回一个游标类型(REF CURSOR),进而填充ADODB.Recordset对象。 首先,让我们...

    oracle函数调用存储过程

    ### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...

    什么是oracle 游标

    游标变量,可以将游标作为参数传递给过程或函数;以及游标的循环处理,结合PL/SQL块实现复杂的逻辑控制。 游标的使用需要注意效率问题,因为频繁的游标操作可能导致性能下降。在处理大量数据时,应考虑使用批处理或...

    oracle 游标注入

    在Oracle数据库中,一种新型的攻击方式——**游标注入**,允许攻击者在无需创建过程或函数的情况下执行任意SQL语句。这种攻击方法不仅降低了攻击门槛,也对现有的安全评估机制提出了挑战。 #### Oracle游标注入概述...

    oracle游标变量和数据包

    在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的结果返回或存储过程的输出参数来传递结果集。为了能够使用 Refcursor,首先需要定义一个新的类型来表示它: - **弱类型派生**:这种...

    oracle存储过程、函数和程序包.pptx

    Oracle存储过程、函数和程序包是数据库管理系统中的一种机制,允许开发者在数据库服务器上创建和执行自定义的代码,以提高数据库的性能和安全性。本文将对Oracle存储过程、函数和程序包进行详细的介绍,并提供相关的...

    ORACLE 游标

    游标是Oracle数据库中处理数据的强大工具,通过理解和掌握不同类型游标的使用,可以更灵活地进行数据处理,提高应用程序的性能和功能。无论是简单的数据检索还是复杂的事务处理,游标都能提供必要的支持。希望本文...

    oracle存储过程和函数PPT

    在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...

    oracle函数大全及存储过程语法

    Oracle数据库是世界上最广泛使用的...Oracle函数和存储过程的掌握,能够帮助数据库管理员和开发人员更高效地操作和管理数据库,提高代码的复用性和可维护性。理解并熟练运用这些语法是提升Oracle数据库技能的关键步骤。

    roacel 游标集锦

    动态SQL允许在运行时构建和执行SQL语句,这对于处理不确定的或用户定义的查询非常有用。在动态SQL中使用游标可以处理动态生成的结果集。 6. **存储过程中的游标变量** (6.存儲過程中的游標變量.txt) 在存储过程中...

    ORACLE学习资料大全(存过,索引,函数,优化,分页,联表,游标,基础sql)

    本资源包“ORACLE学习资料大全”涵盖了Oracle数据库的关键知识点,包括存储过程、索引、函数、查询优化、分页查询、联接操作、游标以及基础SQL语法等内容,对于想要深入学习Oracle的人来说是一份宝贵的资源。...

Global site tag (gtag.js) - Google Analytics