step2.pl
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #!/usr/bin/perl
  2. ##
  3. ##  MAIN
  4. ##
  5. $table_name="";
  6. $old_name="";
  7. $references_table="";
  8. $references_column="";
  9. $is_create=0;
  10. while ( <> ) 
  11. {
  12. chop;
  13. $str=$_ ;
  14. if ($is_create == 1) {
  15. $table_name=$str;
  16.    $is_create=2;
  17. }
  18. if ( $str =~ /^CREATE TABLE/ ){
  19. $is_create=1;
  20. }
  21. if ($is_create == 2) {
  22. if ($str =~ /^FOREIGN KEY/){
  23. ($d1,$d2,$d3,$columns,$d4,$d5,$references_table,$d6) = split (/ /,$str,8);
  24. #printf "Table $table_name $columns $references_tablen";
  25. if ($table_name ne $old_name ){
  26. printf "--n-- Trigger for $table_namen--nn";
  27. }
  28. foreach $i ( split(/,/ , $columns ) ){
  29. print "CREATE INDEX I_$table_name";
  30. print "_$i ON $table_name ( $i ) ;n";
  31. }
  32. printf "nCREATE TRIGGER T_P_$table_name";
  33. printf "_$references_table BEFORE INSERT OR UPDATE ON $table_name FOR EACH ROWn" ;
  34. printf "EXECUTE PROCEDUREn";
  35. printf "check_primary_key(";
  36. $val=0;
  37. foreach $i ( split(/,/ , $columns ) ){
  38. print "'$i',";
  39. $val=$val+1 ;
  40. }
  41. print "'$references_table',";
  42. $t=1;
  43. foreach $i ( split(/,/,$columns ) ){
  44. print "'$i'";
  45. if ( $t < $val ) {
  46. printf ",";
  47. }
  48. $t=$t+1;
  49. }
  50. print " );nn";
  51. printf "CREATE TRIGGER T_F_D_$references_table";
  52. printf "_$table_name BEFORE DELETE ON $references_table FOR EACH ROWn" ;
  53. printf "EXECUTE PROCEDUREn";
  54. printf "check_foreign_key(1,'cascade',";
  55. $val=0;
  56. foreach $i ( split(/,/ , $columns ) ){
  57. print "'$i',";
  58. $val=$val+1 ;
  59. }
  60. print "'$table_name',";
  61. $t=1;
  62. foreach $i ( split(/,/,$columns ) ){
  63. print "'$i'";
  64. if ( $t < $val ) {
  65. printf ",";
  66. }
  67. $t=$t+1;
  68. }
  69. print " );nn";
  70. printf "CREATE TRIGGER T_F_U_$references_table";
  71. printf "_$table_name AFTER UPDATE ON $references_table FOR EACH ROWn" ;
  72. printf "EXECUTE PROCEDUREn";
  73. printf "check_foreign_key(1,'cascade',";
  74. $val=0;
  75. foreach $i ( split(/,/ , $columns ) ){
  76. print "'$i',";
  77. $val=$val+1 ;
  78. }
  79. print "'$table_name',";
  80. $t=1;
  81. foreach $i ( split(/,/,$columns ) ){
  82. print "'$i'";
  83. if ( $t < $val ) {
  84. printf ",";
  85. }
  86. $t=$t+1;
  87. }
  88. print " );nn";
  89. if ($table_name ne $old_name ){
  90. printf "-- ********************************nnn";
  91. }
  92. $old_name=$table_name ;
  93.  }
  94.  }
  95.  if ($str =~  /^);/ ) {
  96.     $is_create = 0 ;
  97.  }
  98. }