国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

在Oracle9i內(nèi)向給定的表對象內(nèi)插入實際的行

2024-08-29 13:42:27
字體:
供稿:網(wǎng)友
  在開發(fā)數(shù)據(jù)庫程序時,經(jīng)常需要象數(shù)據(jù)庫表對象內(nèi)錄入些測試數(shù)據(jù),假如針對每個表對象都建立一個錄入的存儲過程,顯得有些麻煩。這里給出一個示例pl/sql代碼,調(diào)用者給出要插入測試數(shù)據(jù)的表對象名稱,和待插入的行數(shù)后,過程即可產(chǎn)生隨機數(shù)據(jù),錄入到表對象內(nèi)。
  
  /*-------------向給定的表對象內(nèi)插入實際的行。---------------------------*/
  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;
  
  --定義動態(tài)sql查詢的游標(biāo)
  l_cursor number:= dbms_sql.open_cursor;
  l_ignone number;
  --動態(tài)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語句的參數(shù)字符串
  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);
  
  --為參數(shù)變量賦值
  dbms_sql.parse(l_cursor,sqlstr,dbms_sql.native);
  
  for var_rows in 1..p_numrows loop
  --填充插入?yún)?shù)的值
  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;
  --執(zhí)行動態(tài)的SQL語句
  l_ignone:=dbms_sql.execute(l_cursor);
  end loop;
  commit;
  dbms_sql.close_cursor(l_cursor);
  
  end Insert_Rows;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蕉岭县| 长岛县| 中西区| 垣曲县| 翁牛特旗| 法库县| 满洲里市| 西和县| 绥芬河市| 渭南市| 烟台市| 绍兴市| 津市市| 承德市| 荆门市| 安新县| 东城区| 河池市| 栾城县| 于都县| 晋城| 乌拉特中旗| 应城市| 岗巴县| 尚志市| 钟山县| 三亚市| 甘德县| 吉林市| 临西县| 天长市| 奉化市| 普陀区| 泾阳县| 永昌县| 永修县| 湄潭县| 阳山县| 肥乡县| 遵化市| 改则县|