You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.4 KiB

  1. ##################################################
  2. # Author: Jeb
  3. # Date: 2007/04
  4. # Purpose: To create a tpcb database, tables and
  5. # stored procedures to load the database
  6. # and run transactions against the DB
  7. ##################################################
  8. --disable_warnings
  9. DROP DATABASE IF EXISTS tpcb;
  10. --enable_warnings
  11. CREATE DATABASE tpcb;
  12. --echo
  13. CREATE TABLE tpcb.account (id INT, bid INT, balance DECIMAL(10,2),
  14. filler CHAR(255), PRIMARY KEY(id));
  15. --echo
  16. CREATE TABLE tpcb.branch (bid INT, balance DECIMAL(10,2), filler VARCHAR(255),
  17. PRIMARY KEY(bid));
  18. --echo
  19. CREATE TABLE tpcb.teller (tid INT, balance DECIMAL(10,2), filler VARCHAR(255),
  20. PRIMARY KEY(tid));
  21. --echo
  22. CREATE TABLE tpcb.history (id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT,
  23. tid INT, bid INT, amount DECIMAL(10,2),
  24. tdate DATETIME, teller CHAR(20), uuidf LONGBLOB,
  25. filler CHAR(80),PRIMARY KEY (id));
  26. --echo
  27. --echo --- Create stored procedures & functions ---
  28. --echo
  29. --disable_query_log
  30. delimiter |;
  31. CREATE PROCEDURE tpcb.load()
  32. BEGIN
  33. DECLARE acct INT DEFAULT 100;
  34. DECLARE brch INT DEFAULT 10;
  35. DECLARE tell INT DEFAULT 100;
  36. DECLARE tmp INT DEFAULT 10;
  37. WHILE brch > 0 DO
  38. SET tmp = 100;
  39. WHILE tmp > 0 DO
  40. INSERT INTO tpcb.account VALUES (acct, brch, 0.0, "FRESH ACCOUNT");
  41. SET acct = acct - 1;
  42. SET tmp = tmp -1;
  43. END WHILE;
  44. INSERT INTO tpcb.branch VALUES (brch, 0.0, "FRESH BRANCH");
  45. SET brch = brch - 1;
  46. END WHILE;
  47. WHILE tell > 0 DO
  48. INSERT INTO tpcb.teller VALUES (tell, 0.0, "FRESH TELLER");
  49. SET tell = tell - 1;
  50. END WHILE;
  51. END|
  52. CREATE FUNCTION tpcb.account_id () RETURNS INT
  53. BEGIN
  54. DECLARE num INT;
  55. DECLARE ran INT;
  56. SELECT RAND() * 10 INTO ran;
  57. IF (ran < 5)
  58. THEN
  59. SELECT RAND() * 10 INTO num;
  60. ELSE
  61. SELECT RAND() * 100 INTO num;
  62. END IF;
  63. IF (num < 1)
  64. THEN
  65. RETURN 1;
  66. END IF;
  67. RETURN num;
  68. END|
  69. CREATE FUNCTION tpcb.teller_id () RETURNS INT
  70. BEGIN
  71. DECLARE num INT;
  72. DECLARE ran INT;
  73. SELECT RAND() * 10 INTO ran;
  74. IF (ran < 5)
  75. THEN
  76. SELECT RAND() * 10 INTO num;
  77. ELSE
  78. SELECT RAND() * 100 INTO num;
  79. END IF;
  80. IF (num < 1)
  81. THEN
  82. RETURN 1;
  83. END IF;
  84. RETURN num;
  85. END|
  86. CREATE PROCEDURE tpcb.trans(in format varchar(3))
  87. BEGIN
  88. DECLARE acct INT DEFAULT 0;
  89. DECLARE brch INT DEFAULT 0;
  90. DECLARE tell INT DEFAULT 0;
  91. DECLARE bal DECIMAL(10,2) DEFAULT 0.0;
  92. DECLARE amount DECIMAL(10,2) DEFAULT 1.00;
  93. DECLARE test INT DEFAULT 0;
  94. DECLARE bbal DECIMAL(10,2) DEFAULT 0.0;
  95. DECLARE tbal DECIMAL(10,2) DEFAULT 0.0;
  96. DECLARE local_uuid VARCHAR(255);
  97. DECLARE local_user VARCHAR(255);
  98. DECLARE local_time TIMESTAMP;
  99. SELECT RAND() * 10 INTO test;
  100. SELECT tpcb.account_id() INTO acct;
  101. SELECT tpcb.teller_id() INTO tell;
  102. SELECT account.balance INTO bal FROM tpcb.account WHERE id = acct;
  103. SELECT account.bid INTO brch FROM tpcb.account WHERE id = acct;
  104. SELECT teller.balance INTO tbal FROM tpcb.teller WHERE tid = tell;
  105. SELECT branch.balance INTO bbal FROM tpcb.branch WHERE bid = brch;
  106. IF (test < 5)
  107. THEN
  108. SET bal = bal + amount;
  109. SET bbal = bbal + amount;
  110. SET tbal = tbal + amount;
  111. UPDATE tpcb.account SET balance = bal, filler = 'account updated'
  112. WHERE id = acct;
  113. UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
  114. WHERE bid = brch;
  115. UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
  116. WHERE tid = tell;
  117. ELSE
  118. SET bal = bal - amount;
  119. SET bbal = bbal - amount;
  120. SET tbal = tbal - amount;
  121. UPDATE tpcb.account SET balance = bal, filler = 'account updated'
  122. WHERE id = acct;
  123. UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
  124. WHERE bid = brch;
  125. UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
  126. WHERE tid = tell;
  127. END IF;
  128. IF (format = 'SBR')
  129. THEN
  130. SET local_uuid=UUID();
  131. SET local_user=USER();
  132. SET local_time= NOW();
  133. INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, local_time,local_user,
  134. local_uuid,'completed trans');
  135. ELSE
  136. INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, NOW(), USER(),
  137. UUID(),'completed trans');
  138. END IF;
  139. END|
  140. delimiter ;|
  141. --enable_query_log
  142. --echo
  143. --echo *** Stored Procedures Created ***
  144. --echo