在oracle存储过程中创建暂时表

在oracle的存储过程中,不能直接使用DDL语句,比方create、alter、drop、truncate等。

那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了:

create or replace procedure pro as
  str_sql varchar2(100);
begin
  -- 创建暂时表
  str_sql := ‘create global temporary table temp_table (
       col1 varchar2(10),
       col2 number
    ) on commit preserve rows‘;
  execute immediate str_sql;

  -- 使用暂时表
  str_sql := ‘insert into temp_table(col1, col2) values(‘‘a‘‘, 1)‘;
  execute immediate str_sql;

  -- 删除暂时表
  str_sql := ‘drop table temp_table‘;
  execute immediate str_sql;
end;

在oracle中。暂时表分为会话级别(session)和事务级别(transaction)两种。

会话级的暂时表在整个会话期间都存在,直到会话结束;事务级别的暂时表数据在transaction结束后消失。即commit/rollback或结束会话时,

会清除暂时表数据。

on commit preserve rows -- 会话级别暂时表(退出登录会结束会话)

on commit delete rows -- 事务级别暂时表(提交或回滚会结束事务)

暂时表优缺点:

1. 在只查询数据时建议使用游标。

2. 暂时表不会建立索引。所以假设数据量比較大或进行多次查询时,不推荐使用。

时间: 2024-10-23 20:03:58

在oracle存储过程中创建暂时表的相关文章

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

Oracle存储过程中异常Exception的捕捉和处理

Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Varchar2) AUTHID CURRENT_USER AS --声明异常 some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition v_ErrorCode NUMBER; -- Variable to hold

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX (      AAA           

如何在oracle 12c中创建普通用户

-------如何在oracle 12c中创建普通用户------- [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Sun Nov 29 21:43:50 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edit

Oracle存储过程中跳出循环的写法

Oracle存储过程中跳出循环的写法 博客分类: oracle Oracle 记录exit和return的用法 exit用来跳出循环 loop IF V_KBP IS NULL THEN           EXIT;    END IF; end loop; return跳出存储过程 loop IF V_KBP IS NULL THEN         return;    END IF; end loop; 跳出loop 一次循环 oracle 11g已提供continue; oracle

Oracle 存储过程中的 =>

oracle实参与形参有两种对应方式1.一种是位置方式,和面向对象语言参数传递类似;2.另外一种是=> 作为形参对应,因为位置对应方法有缺限,比如一个函数有3个参数,但第2个是可以不传(有默认值),这里就没办法位置对应方法,oralce内部一般用此种方法作参数传递. CREATE OR REPLACE PROCEDURE HelloWorld( p_user_name VARCHAR2, p_val1 VARCHAR2 DEFAULT ' Good Moning,', p_val2 VARCHA

oracle 存储过程中使用date 时、分、秒丢失

今天有一开发兄弟找我,说出现一奇怪现象,在存储过程中赋date类型的值,时.分.秒都丢失了,下面来做个试验: SQL> drop table test purge; SQL> create table test ( fill_date  date ); SQL> insert into test values(sysdate); SQL> commit; SQL> select to_char(fill_date,'yyyy-MM-dd HH24:mi:ss') from t

java 实现往oracle存储过程中传递array数组类型的参数

注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  > 最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码就不写上了,因为项目中存储过程的调用方法全部是封装好的(好像现在都这样,都姓3层,嘿嘿) 原理: 1.一维数组 A.单纯的一维数组的话,直接建立一个table类型就可以 1 TYPE TYPE_VARCHAR AS TABLE OF VARCHAR2(200); 2.多维数组 A.多维数组就要稍加修改了,如

ORACLE存储过程的创建和执行的简单示例和一些注意点

此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SELECT的数据的.通俗的讲就是用来存储查询数据的一个临时的变量. 游标的创建: 1 CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR; 2 END pkg_query; 第二步:存储过程的创建 1 create o