在Oralce9i内向给定的表对象内插入实际的行

原创 2003年08月29日 07:29:00

     在开发数据库程序时,经常需要象数据库表对象内录入些测试数据,如果针对每个表对象都建立一个录入的存储过程,显得有些麻烦。这里给出一个示例pl/sql代码,调用者给出要插入测试数据的表对象名称,和待插入的行数后,过程即可产生随机数据,录入到表对象内。

/*-------------向给定的表对象内插入实际的行。---------------------------*/
  procedure Insert_Rows(p_tablename varchar, p_numrows number)
  as
    --定义dba_tab_columns视图类型的表对象,用于存储给定表的字段的定义信息
    type table_define is table of dba_tab_columns%rowtype index by binary_integer;
    td table_define;
    i binary_integer;

    --定义动态sql查询的游标
    l_cursor number:= dbms_sql.open_cursor;
    l_ignone number;
    --动态sql语句字符变量
    sqlstr varchar2(1000);
  begin
    --获得表的所有字段的定义信息
    i:=0;
    for rec in(select * from dba_tab_columns where table_name=upper(p_tablename))
    loop
      i:= i+1;
      td(i):= rec;
      dbms_output.put_line(td(i).table_name);
    end loop;
    --组织insert sql语句的字段字符串
    sqlstr:='insert into '||td(1).table_name||'(';
    for var in 1..i loop
      sqlstr:=sqlstr||td(var).column_name;
      if(var<>i) then
        sqlstr:=sqlstr||',';
      end if;
    end loop;
    --组织insert sql语句的参数字符串
    sqlstr:=sqlstr||')'||'values(';
    for var in 1..i loop
     sqlstr:=sqlstr||':'||td(var).column_name;
     if(var<>i) then
       sqlstr:=sqlstr||',';
     end if;
    end loop;
    sqlstr:=sqlstr||')';

    dbms_output.put_line(sqlstr);

    --为参数变量赋值
    dbms_sql.parse(l_cursor,sqlstr,dbms_sql.native);
   
    for var_rows in 1..p_numrows loop
      --填充插入参数的值
      for var in 1..i loop
        if td(var).data_type='VARCHAR2' then
          dbms_sql.bind_variable(l_cursor,':'||td(var).column_name,dbms_random.string('A',td(var).data_length));
        elsif td(var).data_type='NUMBER' then
          dbms_sql.bind_variable(l_cursor,':'||td(var).column_name,
          round(dbms_random.value*power(10,td(var).data_precision-td(var).data_scale),td(var).data_scale));
        else
          dbms_sql.bind_variable(l_cursor,':'||td(var).column_name,'UNKNOW_TYPE');
        end if;
      end loop;
      --执行动态的SQL语句
      l_ignone:=dbms_sql.execute(l_cursor);
    end loop; 
    commit;
    dbms_sql.close_cursor(l_cursor);
   
  end Insert_Rows;

MySQL,查询其他表,插入新表

我现在面临一个日常性的操作:需要根据项目名称,查找
  • gaojinshan
  • gaojinshan
  • 2014年08月19日 11:05
  • 1672

读书笔记之《内向者优势》

作为一名程序员,抑或是看到这篇文章的你,相信大部分人都或多或少受到内向性格的困扰,被同事和领导忽视、社交困难、职场晋升之路不是顺等等。然而,我们并不能因此而否定自己,否定我们通过思考和努力可以做出改变...
  • anda0109
  • anda0109
  • 2016年10月13日 00:15
  • 961

简单顺序表的插入,删除,指定位置,指定元素的插入删除操作

简单顺序表的首部和尾部的插入删除,查找指定元素,删除指定元素,删除指定位置的元素,删除指定元素。...
  • o_bvious
  • o_bvious
  • 2016年05月09日 22:48
  • 1483

使用JDBC 插入向数据库插入对象

package com.ctl.util; import java.io.IOException; import java.lang.reflect.Field; import java.lang....
  • CTLLIN
  • CTLLIN
  • 2014年05月09日 01:19
  • 8254

1040: [ZJOI2008]骑士 基环+内向树 DP

不错的一道题目。 首先如果这是一棵树,那么本题就成了没有上司的舞会QAQ。。 加入一条边后唯一多的影响就是,这条边的两个端点不能同时选,其他条件是一样的。那么我们就删去这条边跑两次树形DP就行啦。...
  • Phenix_2015
  • Phenix_2015
  • 2016年01月15日 08:50
  • 929

java语言基础(33)——面向对象(父类中没有无参构造编译报错——无法将类 xxx中的构造器 xxx应用到给定类型 实际参数列表和形式参数列表长度不同)

注意:以下代码是错的。 class Father { public Father(String name){ System.out.println("Father带参构造"); } } cl...
  • wang740209668
  • wang740209668
  • 2017年03月30日 23:39
  • 416

动态给table 添加 tr(行),实现添加多个对象

usually function 序号 姓名 年龄 生日 备注 ...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:27
  • 381

SHELL 在指定行的前/后插入指定内容

#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file    #在a.txt的第88行插入文件b.txt awk '1;NR==8...
  • weiyuefei
  • weiyuefei
  • 2017年04月01日 13:59
  • 4428

ITOO---MVC3.0动态添加表格的行数并Controller中获取添加数据

最近由于项目的中的相关需求,需要在MVC的视图中动态的添加添加数据的行数,并将前台输入的多行数据在Controller中获得传回服务端。本文将介绍如何从MVC的View端动态添加数据行数并将输入的数据...
  • Senior_lee
  • Senior_lee
  • 2015年01月31日 16:51
  • 2048

伪知识之通俗易懂得解释计算机系统的专有名词持续更新:【内向即失败--王奕君】

该内容面向计算机系统原理。。。。。。。 纯属个人见解,内容并不是完全靠谱,仅供参考 一.何为镜像文件? Iso镜像文件其实本质上和Rar,zip文件并 无太大区别,通常...
  • qq_37995231
  • qq_37995231
  • 2017年12月24日 20:59
  • 32
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Oralce9i内向给定的表对象内插入实际的行
举报原因:
原因补充:

(最多只允许输入30个字)