在开发数据库程序时,经常需要象数据库表对象内录入些测试数据,如果针对每个表对象都建立一个录入的存储过程,显得有些麻烦。 这里给出一个示例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:=sqlstrtd(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;
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器