Oracle中利用存储过程建表

Oracle中存储过程不可以执行DDL语句,但是我们可以利用动态sql语句来建立表格。

如下:

 

代码

create or replace procedure spCreateTestTable
is
    v_CreateString varchar2(1000);
begin
    declare
        v_count number;
    begin
        v_count := 0;
        
        select count(*)
        into v_count
        from tab
        where tname='TEST_TABLE';
        
        if v_count=1 then
            dbms_output.put_line('test table already exists');
            v_CreateString := 'drop table test_table';
            execute immediate v_CreateString;
            commit;
        else
            dbms_output.put_line('test table created');
        end if;
        
        v_CreateString := 'create table test_table(' ||
                                                'aa varchar2(5), ' ||
                                                'bb varchar2(5))';
        execute immediate v_CreateString;
        commit;
    exception
   when others
   then
        rollback;
   end;
end;

 

 

时间: 2024-11-03 21:07:05

Oracle中利用存储过程建表的相关文章

oracel-如何把下面的oracle中的存储过程转换成sql的?

问题描述 如何把下面的oracle中的存储过程转换成sql的? create or replace procedure BJ_MAXCASENO_Get(InCount in number, OutMaxCaseNO out number) as tem number; begin select max(caseno) into tem from BJ_MAXCASENO; if tem is null then tem := 0; -- 没有数据时新增0进入 insert into BJ_MA

Oracle 9i轻松取得建表和索引的DDL语句_oracle

正在看的ORACLE教程是:Oracle 9i轻松取得建表和索引的DDL语句.我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事.我们通常的做法都是通过export with rows=no来得到,但它的输出因为格式的问题并不能直接拿来用.而另一种方法就是写复杂的脚本来查询数据字典,但这对于一稍微复杂的对象,如IOT和嵌套表等,还是无法查到. 从数据字典中获得DDL语句是经常要用的,特别是在系统升级/重建的时候.在Oracle 9i中,我们可以直接通过执行dbms_metadata从

oracle中如何判断本表有多少张表对其有外键关联

在oracle中如何判断本表有多少张表对其有外键关联?我们主要分为两步: 第一步:        //查询表的主键约束名 select * from user_constraints e where e.table_name='' -----此处输入表名 第二步:        //查询所有引用到该主键的记录 select b.table_name,b.column_name from user_constraints a inner join user_cons_columns b on a.

利用存储过程创建表提示权限不足,但是单独创建就可以

问题描述 利用存储过程创建表提示权限不足,但是单独创建就可以 利用存储过程创建表提示权限不足,但是单独创建就可以 create or replace procedure PRC_GZF_BZ_YWSLID(ywslid in verchar2) as L_YWSLID verchar2(30); tpg_gzfspbnum verchar2(30);begin L_YWSLID:=ywslid; tpg_gzfspbnum:='tpg_gzfspb'||L_SLIDID;execute imme

oracle中drop后的表清楚表的含义

oracle中drop后的表清楚表的含义 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除.  1.通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句  flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_

怎样把oracle中前缀相同的表查出多少张

问题描述 怎样把oracle中前缀相同的表查出多少张 问题描述:比如a_,b_,c_这些前缀开头数据表分别查询各有多少张. 解决方案 select count(*) from user_tables where table_name like 'a_%' 解决方案二: cyrwyy1314 已经回答了,我再补充一点oracle里面'_'好像是指匹配任意一个字符 解决方案三: select count(*) from user_tables where table_name like '%_%'

基于ORACLE数据库的循环建表及循环创建存储过程的SQL语句实现

一.概述 在实际的软件开发项目中,我们经常会遇到需要创建多个相同类型的数据库表或存储过程的时候.例如,如果按照身份证号码的尾号来分表,那么就需要创建10个用户信息表,尾号相同的用户信息放在同一个表中. 对于类型相同的多个表,我们可以逐个建立,也可以采用循环的方法来建立.与之相对应的,可以用一个存储过程实现对所有表的操作,也可以循环建立存储过程,每个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表,每个表中包含员工工号(8位)和年龄字段,以工号的最后一位来分表.同时,我们建立存储

Oracle中使用临时表解决表冲突的例子

平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作失效:要求回退 ORA-06502: PL/SQL: 数字或值错误 : 字符串

如何在Oracle中使用临时表解决表冲突

本文介绍一个Oracle里面使用临时表解决表冲突的例子,并附创建临时表的例子 平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作