FirebirdDbBuildDatabase.sql 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. -- Drop stored procedures first
  2. SET TERM !! ;
  3. EXECUTE BLOCK AS BEGIN
  4. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'SELECTPEOPLE')) then execute statement 'DROP PROCEDURE "SELECTPEOPLE";';
  5. END!!
  6. SET TERM ; !!
  7. SET TERM !! ;
  8. EXECUTE BLOCK AS BEGIN
  9. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'SELECTPEOPLEWITHPARAM')) then execute statement 'DROP PROCEDURE "SELECTPEOPLEWITHPARAM";';
  10. END!!
  11. SET TERM ; !!
  12. SET TERM !! ;
  13. EXECUTE BLOCK AS BEGIN
  14. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'COUNTPEOPLE')) then execute statement 'DROP PROCEDURE "COUNTPEOPLE";';
  15. END!!
  16. SET TERM ; !!
  17. SET TERM !! ;
  18. EXECUTE BLOCK AS BEGIN
  19. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'COUNTPEOPLEWITHPARAM')) then execute statement 'DROP PROCEDURE "COUNTPEOPLEWITHPARAM";';
  20. END!!
  21. SET TERM ; !!
  22. SET TERM !! ;
  23. EXECUTE BLOCK AS BEGIN
  24. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'UPDATEPEOPLE')) then execute statement 'DROP PROCEDURE "UPDATEPEOPLE";';
  25. END!!
  26. SET TERM ; !!
  27. SET TERM !! ;
  28. EXECUTE BLOCK AS BEGIN
  29. if (exists(SELECT 1 FROM rdb$procedures WHERE rdb$procedure_name = 'UPDATEPEOPLEWITHPARAM')) then execute statement 'DROP PROCEDURE "UPDATEPEOPLEWITHPARAM";';
  30. END!!
  31. SET TERM ; !!
  32. SET TERM !! ;
  33. EXECUTE BLOCK AS BEGIN
  34. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'OrderLines')) then execute statement 'DROP TABLE "OrderLines";';
  35. END!!
  36. SET TERM ; !!
  37. SET TERM !! ;
  38. EXECUTE BLOCK AS BEGIN
  39. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'Orders')) then execute statement 'DROP TABLE "Orders";';
  40. END!!
  41. SET TERM ; !!
  42. SET TERM !! ;
  43. EXECUTE BLOCK AS BEGIN
  44. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'People')) then execute statement 'DROP TABLE "People";';
  45. END!!
  46. SET TERM ; !!
  47. SET TERM !! ;
  48. EXECUTE BLOCK AS BEGIN
  49. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'SpecificOrderLines')) then execute statement 'DROP TABLE "SpecificOrderLines";';
  50. END!!
  51. SET TERM ; !!
  52. SET TERM !! ;
  53. EXECUTE BLOCK AS BEGIN
  54. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'SpecificOrders')) then execute statement 'DROP TABLE "SpecificOrders";';
  55. END!!
  56. SET TERM ; !!
  57. SET TERM !! ;
  58. EXECUTE BLOCK AS BEGIN
  59. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'SpecificPeople')) then execute statement 'DROP TABLE "SpecificPeople";';
  60. END!!
  61. SET TERM ; !!
  62. SET TERM !! ;
  63. EXECUTE BLOCK AS BEGIN
  64. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'TransactionLogs')) then execute statement 'DROP TABLE "TransactionLogs";';
  65. END!!
  66. SET TERM ; !!
  67. SET TERM !! ;
  68. EXECUTE BLOCK AS BEGIN
  69. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'Note')) then execute statement 'DROP TABLE "Note";';
  70. END!!
  71. SET TERM ; !!
  72. CREATE TABLE "People" (
  73. "Id" CHAR(36) NOT NULL PRIMARY KEY,
  74. "FullName" VARCHAR(255),
  75. "Age" BIGINT NOT NULL,
  76. "Height" INT NOT NULL,
  77. "Dob" TIMESTAMP
  78. );
  79. CREATE TABLE "Orders" (
  80. "Id" INT PRIMARY KEY NOT NULL,
  81. "PersonId" CHAR(36) NOT NULL,
  82. "PoNumber" VARCHAR(15) NOT NULL,
  83. "OrderStatus" INT NOT NULL,
  84. "CreatedOn" TIMESTAMP NOT NULL,
  85. "CreatedBy" VARCHAR(255) NOT NULL,
  86. CONSTRAINT "FK_Orders_People" FOREIGN KEY ("PersonId") REFERENCES "People" ("Id")
  87. );
  88. SET TERM !! ;
  89. EXECUTE BLOCK AS BEGIN
  90. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_ORDERS_ID')) then execute statement 'DROP SEQUENCE GEN_ORDERS_ID;';
  91. END!!
  92. SET TERM ; !!
  93. CREATE SEQUENCE GEN_ORDERS_ID;
  94. ALTER SEQUENCE GEN_ORDERS_ID RESTART WITH 0;
  95. SET TERM !! ;
  96. CREATE TRIGGER trigger_Orders_id FOR "Orders"
  97. ACTIVE BEFORE INSERT POSITION 0
  98. AS
  99. BEGIN
  100. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_ORDERS_ID, 1);
  101. END!!
  102. SET TERM ; !!
  103. CREATE TABLE "OrderLines" (
  104. "Id" INT PRIMARY KEY NOT NULL,
  105. "OrderId" INT NOT NULL,
  106. "Qty" SMALLINT NOT NULL,
  107. "Status" SMALLINT NOT NULL,
  108. "SellPrice" NUMERIC(10, 4) NOT NULL,
  109. CONSTRAINT "FK_OrderLines_Orders" FOREIGN KEY ("OrderId") REFERENCES "Orders" ("Id")
  110. );
  111. SET TERM !! ;
  112. EXECUTE BLOCK AS BEGIN
  113. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_ORDERLINES_ID')) then execute statement 'DROP SEQUENCE GEN_ORDERLINES_ID;';
  114. END!!
  115. SET TERM ; !!
  116. CREATE SEQUENCE GEN_ORDERLINES_ID;
  117. ALTER SEQUENCE GEN_ORDERLINES_ID RESTART WITH 0;
  118. SET TERM !! ;
  119. CREATE TRIGGER trigger_OrderLines_id FOR "OrderLines"
  120. ACTIVE BEFORE INSERT POSITION 0
  121. AS
  122. BEGIN
  123. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_ORDERLINES_ID, 1);
  124. END!!
  125. SET TERM ; !!
  126. CREATE TABLE "SpecificPeople" (
  127. "Id" CHAR(36) NOT NULL PRIMARY KEY,
  128. "FullName" VARCHAR(255),
  129. "Age" BIGINT NOT NULL,
  130. "Height" INT NOT NULL,
  131. "Dob" TIMESTAMP
  132. );
  133. CREATE TABLE "SpecificOrders" (
  134. "Id" INT PRIMARY KEY NOT NULL,
  135. "PersonId" CHAR(36) NOT NULL,
  136. "PoNumber" VARCHAR(15) NOT NULL,
  137. "OrderStatus" INT NOT NULL,
  138. "CreatedOn" TIMESTAMP NOT NULL,
  139. "CreatedBy" VARCHAR(255) NOT NULL,
  140. CONSTRAINT "FK_SOrders_SPeople" FOREIGN KEY ("PersonId") REFERENCES "SpecificPeople" ("Id")
  141. );
  142. SET TERM !! ;
  143. EXECUTE BLOCK AS BEGIN
  144. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_SPECIFICPEOPLE_ID')) then execute statement 'DROP SEQUENCE GEN_SPECIFICPEOPLE_ID;';
  145. END!!
  146. SET TERM ; !!
  147. CREATE SEQUENCE GEN_SPECIFICPEOPLE_ID;
  148. ALTER SEQUENCE GEN_SPECIFICPEOPLE_ID RESTART WITH 0;
  149. SET TERM !! ;
  150. CREATE TRIGGER trigger_gen_SPeople_id FOR "SpecificOrders"
  151. ACTIVE BEFORE INSERT POSITION 0
  152. AS
  153. BEGIN
  154. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_SPECIFICPEOPLE_ID, 1);
  155. END!!
  156. SET TERM ; !!
  157. CREATE TABLE "SpecificOrderLines" (
  158. "Id" INT PRIMARY KEY NOT NULL,
  159. "OrderId" INT NOT NULL,
  160. "Qty" SMALLINT NOT NULL,
  161. "Status" SMALLINT NOT NULL,
  162. "SellPrice" NUMERIC(10, 4) NOT NULL,
  163. CONSTRAINT "FK_SOLines_SOrders" FOREIGN KEY ("OrderId") REFERENCES "SpecificOrders"("Id")
  164. );
  165. SET TERM !! ;
  166. EXECUTE BLOCK AS BEGIN
  167. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_SORDERLINES_ID')) then execute statement 'DROP SEQUENCE GEN_SORDERLINES_ID;';
  168. END!!
  169. SET TERM ; !!
  170. CREATE SEQUENCE GEN_SORDERLINES_ID;
  171. ALTER SEQUENCE GEN_SORDERLINES_ID RESTART WITH 0;
  172. SET TERM !! ;
  173. CREATE TRIGGER trigger_gen_SPLines_id FOR "SpecificOrderLines"
  174. ACTIVE BEFORE INSERT POSITION 0
  175. AS
  176. BEGIN
  177. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_SORDERLINES_ID, 1);
  178. END!!
  179. SET TERM ; !!
  180. CREATE TABLE "TransactionLogs" (
  181. "Description" VARCHAR(5000) NOT NULL,
  182. "CreatedOn" TIMESTAMP NOT NULL
  183. );
  184. CREATE TABLE "Note" (
  185. "Id" INT PRIMARY KEY NOT NULL,
  186. "Text" VARCHAR(5000) NOT NULL,
  187. "CreatedOn" TIMESTAMP NOT NULL
  188. );
  189. SET TERM !! ;
  190. EXECUTE BLOCK AS BEGIN
  191. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_NOTE_ID')) then execute statement 'DROP SEQUENCE GEN_NOTE_ID;';
  192. END!!
  193. SET TERM ; !!
  194. CREATE GENERATOR GEN_NOTE_ID;
  195. SET GENERATOR GEN_NOTE_ID TO 0;
  196. SET TERM !! ;
  197. CREATE TRIGGER trigger_gen_Note_id FOR "Note"
  198. ACTIVE BEFORE INSERT POSITION 0
  199. AS
  200. BEGIN
  201. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_NOTE_ID, 1);
  202. END!!
  203. SET TERM ; !!
  204. SET TERM !! ;
  205. EXECUTE BLOCK AS BEGIN
  206. if (exists(SELECT 1 FROM rdb$relations WHERE rdb$relation_name = 'BugInvestigation_10R9LZYK')) then execute statement 'DROP TABLE "BugInvestigation_10R9LZYK";';
  207. END!!
  208. SET TERM ; !!
  209. CREATE TABLE "BugInvestigation_10R9LZYK" (
  210. "Id" INT PRIMARY KEY NOT NULL,
  211. "TestColumn1" BLOB
  212. );
  213. SET TERM !! ;
  214. EXECUTE BLOCK AS BEGIN
  215. if (exists(SELECT 1 FROM rdb$generators WHERE rdb$generator_name = 'GEN_BI_10R9LZYK_ID')) then execute statement 'DROP SEQUENCE GEN_BI_10R9LZYK_ID;';
  216. END!!
  217. SET TERM ; !!
  218. CREATE SEQUENCE GEN_BI_10R9LZYK_ID;
  219. ALTER SEQUENCE GEN_BI_10R9LZYK_ID RESTART WITH 0;
  220. SET TERM !! ;
  221. CREATE TRIGGER trigger_gen_BI_10R9LZYK_id FOR "BugInvestigation_10R9LZYK"
  222. ACTIVE BEFORE INSERT POSITION 0
  223. AS
  224. BEGIN
  225. IF (NEW."Id" is NULL) THEN NEW."Id" = GEN_ID(GEN_BI_10R9LZYK_ID, 1);
  226. END!!
  227. SET TERM ; !!
  228. -- Stored procedures
  229. SET TERM !! ;
  230. CREATE PROCEDURE SelectPeople
  231. RETURNS (id varchar(100), fullname varchar(100), age integer)
  232. AS
  233. BEGIN
  234. FOR SELECT "Id", "FullName", "Age"
  235. FROM "People"
  236. INTO :id, :fullname, :age DO
  237. BEGIN
  238. SUSPEND;
  239. END
  240. END!!
  241. SET TERM ; !!
  242. SET TERM !! ;
  243. CREATE PROCEDURE SelectPeopleWithParam (age integer)
  244. RETURNS (id varchar(100), fullname varchar(100))
  245. AS
  246. BEGIN
  247. FOR SELECT "Id", "FullName"
  248. FROM "People"
  249. WHERE "Age" > :age
  250. INTO :id, :fullname DO
  251. BEGIN
  252. SUSPEND;
  253. END
  254. END!!
  255. SET TERM ; !!
  256. SET TERM !! ;
  257. CREATE PROCEDURE CountPeople
  258. RETURNS (numRecs integer)
  259. AS
  260. BEGIN
  261. SELECT COUNT(*) FROM "People" INTO :numRecs;
  262. SUSPEND;
  263. END!!
  264. SET TERM ; !!
  265. SET TERM !! ;
  266. CREATE PROCEDURE CountPeopleWithParam (age integer)
  267. RETURNS (numRecs integer)
  268. AS
  269. BEGIN
  270. SELECT COUNT(*) FROM "People" WHERE "Age" > :age INTO :numRecs;
  271. SUSPEND;
  272. END!!
  273. SET TERM ; !!
  274. SET TERM !! ;
  275. CREATE PROCEDURE UpdatePeople
  276. AS
  277. BEGIN
  278. UPDATE "People" SET "FullName" = 'Updated';
  279. END!!
  280. SET TERM ; !!
  281. SET TERM !! ;
  282. CREATE PROCEDURE UpdatePeopleWithParam (age integer)
  283. AS
  284. BEGIN
  285. UPDATE "People" SET "FullName" = 'Updated' WHERE "Age" > :age;
  286. END!!
  287. SET TERM ; !!