`
MyDicta
  • 浏览: 18851 次
  • 性别: 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
分享到:
评论

相关推荐

    Oracle 中 table 函数的应用浅析

    1. 用游标传递数据 利用游标 REF CURSOR 可将数据集(多行记录)传递到PL/SQL函数: SELECT * FROM TABLE (myfunction (CURSOR (SELECT * FROM mytab))); 2. 利用两个实体化视图(或表)作为样板数据 CREATE ...

    Oracle数据库存储过程技术文档.doc

    1.3.4 包的修改和删除 9 第二章 oracle存储过程基础――PL/SQL 9 2.1 pl/sql基础 9 2.1.1 PL/SQL简介 9 2.1.2 一个简单的PL/SQL块 10 2.1.3 PL/SQL流程控制 13 2.2 游标(CURSOR) 17 2.2.1 游标的概念 18 2.2.2 游标...

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    Oracle.11g.从入门到精通 (2/2)

    3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/...

    Oracle.11g.从入门到精通 (1/2)

    3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/...

    PLSQLDeveloper下载

     PL/SQL中的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。其语法结构为: 过程:Create or replace procedure procname(参数列表) as PL/SQL...

    PL/SQL Developer8.04官网程序_keygen_汉化

     PL/SQL中的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。其语法结构为:  过程:Create or replace procedure procname(参数列表) as PL/SQL...

    Oraclet中的触发器

    在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块,不过有一点不同的是,触发器是隐式调用的,并不能接收参数。 触发器优点 (1)触发器能够实施的检查和操作比主键和外键约束、...

    jdbc基础和参考

    CallableStatement:主要用来执行pl/sql的一些过程,函数等。 1.写一条恒成立的select语句,无论你输入的条件是什么,总是能讲表中的所有数据输出 select id,last_name from s_emp where '1' ='1'; where 1=1; ...

    Java面试宝典2020修订版V1.0.1.doc

    41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 44、一个几千万数据,发现数据查询很慢,怎么办? 55 六、Java高级部分 56 1、java中有几种方法可以实现一个线程?用什么...

    一个好用的数据库类

    cpServerName-----ODBC数据源名 cpUserName-------用户名 cpPassword-----口令 <br>2 通过调用ExeSqlDirect(const char *cpSqlStmt)函数可以执行一些操作数据源的语句,如修改、删除语句等。...

    JAVA面试题最全集

    被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,...

    php网络开发完全手册

    7.5.6 通过回调函数执行正则表达式 7.5.6 的搜索和替换——preg_replace_ 7.5.6 callback 114 7.5.7 用正则表达式进行字符串分割 7.5.7 ——preg_split 115 7.6 字符操作的注意事项 117 7.7 小结 118 第8章 数组操作...

    千方百计笔试题大全

    234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器...

    java面试宝典

    234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器...

    java基础题 很全面

    2. 存储过程和函数的区别。 23 3. 事务是什么? 23 4. 游标的作用?如何知道游标已经到了最后? 23 5. 触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别? 23 简答题 23 1. 作用域public...

    亮剑.NET深入体验与实战精要2

    5.5.1 Oracle和SQL Server的常用函数对比 240 5.5.2 Oracle和SQL Server的语句区别 244 5.5.3 ASP.NET连接Oracle失败的解决方法 245 本章常见技术面试题 246 常见面试技巧之经典问题巧回答 246 本章小结 247 第6章 ...

Global site tag (gtag.js) - Google Analytics