Mercurial > pub > bltoolkit
comparison Data/Create Scripts/Firebird2.sql @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 DROP PROCEDURE Person_SelectByKey; COMMIT; | |
2 DROP PROCEDURE Person_SelectAll; COMMIT; | |
3 DROP PROCEDURE Person_SelectByName; COMMIT; | |
4 DROP PROCEDURE Person_Insert; COMMIT; | |
5 DROP PROCEDURE Person_Insert_OutputParameter; COMMIT; | |
6 DROP PROCEDURE Person_Update; COMMIT; | |
7 DROP PROCEDURE Person_Delete; COMMIT; | |
8 DROP PROCEDURE Patient_SelectAll; COMMIT; | |
9 DROP PROCEDURE Patient_SelectByName; COMMIT; | |
10 DROP PROCEDURE OutRefTest; COMMIT; | |
11 DROP PROCEDURE OutRefEnumTest; COMMIT; | |
12 DROP PROCEDURE Scalar_DataReader; COMMIT; | |
13 DROP PROCEDURE Scalar_OutputParameter; COMMIT; | |
14 DROP PROCEDURE Scalar_ReturnParameter; COMMIT; | |
15 | |
16 DROP TRIGGER CREATE_BinaryDataID; COMMIT; | |
17 DROP TRIGGER CHANGE_BinaryData; COMMIT; | |
18 DROP TRIGGER CREATE_PersonID; COMMIT; | |
19 DROP TRIGGER CREATE_DataTypeTest; COMMIT; | |
20 | |
21 DROP GENERATOR DataTypeID; COMMIT; | |
22 DROP GENERATOR PersonID; COMMIT; | |
23 DROP GENERATOR TimestampGen; COMMIT; | |
24 | |
25 DROP VIEW PersonView; COMMIT; | |
26 | |
27 DROP TABLE Dual; COMMIT; | |
28 DROP TABLE DataTypeTest; COMMIT; | |
29 DROP TABLE BinaryData; COMMIT; | |
30 DROP TABLE Doctor; COMMIT; | |
31 DROP TABLE Patient; COMMIT; | |
32 DROP TABLE Person; COMMIT; | |
33 | |
34 DROP EXTERNAL FUNCTION rtrim; COMMIT; | |
35 DROP EXTERNAL FUNCTION ltrim; COMMIT; | |
36 | |
37 | |
38 DECLARE EXTERNAL FUNCTION ltrim | |
39 CSTRING(255) NULL | |
40 RETURNS CSTRING(255) FREE_IT | |
41 ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf'; | |
42 COMMIT; | |
43 | |
44 DECLARE EXTERNAL FUNCTION rtrim | |
45 CSTRING(255) NULL | |
46 RETURNS CSTRING(255) FREE_IT | |
47 ENTRY_POINT 'IB_UDF_rtrim' MODULE_NAME 'ib_udf'; | |
48 COMMIT; | |
49 | |
50 | |
51 /* | |
52 Dual table FOR supporting queryies LIKE: | |
53 SELECT 1 AS id => SELECT 1 AS "id" *FROM Dual* | |
54 */ | |
55 CREATE TABLE Dual (Dummy VARCHAR(10)); | |
56 COMMIT; | |
57 INSERT INTO Dual (Dummy) VALUES ('X'); | |
58 COMMIT; | |
59 | |
60 -- Person Table | |
61 | |
62 CREATE TABLE Person | |
63 ( | |
64 PersonID INTEGER NOT NULL PRIMARY KEY, | |
65 FirstName VARCHAR(50) CHARACTER SET UNICODE_FSS NOT NULL, | |
66 LastName VARCHAR(50) CHARACTER SET UNICODE_FSS NOT NULL, | |
67 MiddleName VARCHAR(50), | |
68 Gender CHAR(1) NOT NULL CHECK (Gender in ('M', 'F', 'U', 'O')) | |
69 ); | |
70 COMMIT; | |
71 | |
72 CREATE GENERATOR PersonID; | |
73 COMMIT; | |
74 | |
75 CREATE GENERATOR TimestampGen; | |
76 COMMIT; | |
77 | |
78 CREATE TRIGGER CREATE_PersonID FOR Person | |
79 BEFORE INSERT POSITION 0 | |
80 AS BEGIN | |
81 NEW.PersonID = GEN_ID(PersonID, 1); | |
82 END | |
83 COMMIT; | |
84 | |
85 INSERT INTO Person (FirstName, LastName, Gender) VALUES ('John', 'Pupkin', 'M'); | |
86 COMMIT; | |
87 INSERT INTO Person (FirstName, LastName, Gender) VALUES ('Tester', 'Testerson', 'M'); | |
88 COMMIT; | |
89 | |
90 -- Doctor Table Extension | |
91 | |
92 CREATE TABLE Doctor | |
93 ( | |
94 PersonID INTEGER NOT NULL, | |
95 Taxonomy VARCHAR(50) NOT NULL, | |
96 FOREIGN KEY (PersonID) REFERENCES Person (PersonID) | |
97 ON DELETE CASCADE | |
98 ) | |
99 COMMIT; | |
100 | |
101 INSERT INTO Doctor (PersonID, Taxonomy) VALUES (1, 'Psychiatry'); | |
102 COMMIT; | |
103 | |
104 -- Patient Table Extension | |
105 | |
106 CREATE TABLE Patient | |
107 ( | |
108 PersonID int NOT NULL, | |
109 Diagnosis VARCHAR(256) NOT NULL, | |
110 FOREIGN KEY (PersonID) REFERENCES Person (PersonID) | |
111 ON DELETE CASCADE | |
112 ); | |
113 COMMIT; | |
114 | |
115 INSERT INTO Patient (PersonID, Diagnosis) VALUES (2, 'Hallucination with Paranoid Bugs'' Delirium of Persecution'); | |
116 COMMIT; | |
117 | |
118 -- Person_SelectByKey | |
119 | |
120 CREATE PROCEDURE Person_SelectByKey(id INTEGER) | |
121 RETURNS ( | |
122 PersonID INTEGER, | |
123 FirstName VARCHAR(50), | |
124 LastName VARCHAR(50), | |
125 MiddleName VARCHAR(50), | |
126 Gender CHAR(1) | |
127 ) | |
128 AS | |
129 BEGIN | |
130 SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person | |
131 WHERE PersonID = :id | |
132 INTO | |
133 :PersonID, | |
134 :FirstName, | |
135 :LastName, | |
136 :MiddleName, | |
137 :Gender; | |
138 SUSPEND; | |
139 END | |
140 COMMIT; | |
141 | |
142 -- Person_SelectAll | |
143 | |
144 CREATE PROCEDURE Person_SelectAll | |
145 RETURNS ( | |
146 PersonID INTEGER, | |
147 FirstName VARCHAR(50), | |
148 LastName VARCHAR(50), | |
149 MiddleName VARCHAR(50), | |
150 Gender CHAR(1) | |
151 ) | |
152 AS | |
153 BEGIN | |
154 FOR | |
155 SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person | |
156 INTO | |
157 :PersonID, | |
158 :FirstName, | |
159 :LastName, | |
160 :MiddleName, | |
161 :Gender | |
162 DO SUSPEND; | |
163 END | |
164 COMMIT; | |
165 | |
166 -- Person_SelectByName | |
167 | |
168 CREATE PROCEDURE Person_SelectByName ( | |
169 in_FirstName VARCHAR(50), | |
170 in_LastName VARCHAR(50) | |
171 ) | |
172 RETURNS ( | |
173 PersonID int, | |
174 FirstName VARCHAR(50), | |
175 LastName VARCHAR(50), | |
176 MiddleName VARCHAR(50), | |
177 Gender CHAR(1) | |
178 ) | |
179 AS | |
180 BEGIN | |
181 | |
182 FOR SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person | |
183 WHERE FirstName LIKE :in_FirstName and LastName LIKE :in_LastName | |
184 INTO | |
185 :PersonID, | |
186 :FirstName, | |
187 :LastName, | |
188 :MiddleName, | |
189 :Gender | |
190 DO SUSPEND; | |
191 END | |
192 COMMIT; | |
193 | |
194 -- Person_Insert | |
195 | |
196 CREATE PROCEDURE Person_Insert( | |
197 FirstName VARCHAR(50), | |
198 LastName VARCHAR(50), | |
199 MiddleName VARCHAR(50), | |
200 Gender CHAR(1) | |
201 ) | |
202 RETURNS (PersonID INTEGER) | |
203 AS | |
204 BEGIN | |
205 INSERT INTO Person | |
206 ( LastName, FirstName, MiddleName, Gender) | |
207 VALUES | |
208 (:LastName, :FirstName, :MiddleName, :Gender); | |
209 | |
210 SELECT MAX(PersonID) FROM person | |
211 INTO :PersonID; | |
212 SUSPEND; | |
213 END | |
214 COMMIT; | |
215 | |
216 -- Person_Insert_OutputParameter | |
217 | |
218 CREATE PROCEDURE Person_Insert_OutputParameter( | |
219 FirstName VARCHAR(50), | |
220 LastName VARCHAR(50), | |
221 MiddleName VARCHAR(50), | |
222 Gender CHAR(1) | |
223 ) | |
224 RETURNS (PersonID INTEGER) | |
225 AS | |
226 BEGIN | |
227 INSERT INTO Person | |
228 ( LastName, FirstName, MiddleName, Gender) | |
229 VALUES | |
230 (:LastName, :FirstName, :MiddleName, :Gender); | |
231 | |
232 SELECT max(PersonID) FROM person | |
233 INTO :PersonID; | |
234 SUSPEND; | |
235 END | |
236 COMMIT; | |
237 | |
238 -- Person_Update | |
239 | |
240 CREATE PROCEDURE Person_Update( | |
241 PersonID INTEGER, | |
242 FirstName VARCHAR(50), | |
243 LastName VARCHAR(50), | |
244 MiddleName VARCHAR(50), | |
245 Gender CHAR(1) | |
246 ) | |
247 AS | |
248 BEGIN | |
249 UPDATE | |
250 Person | |
251 SET | |
252 LastName = :LastName, | |
253 FirstName = :FirstName, | |
254 MiddleName = :MiddleName, | |
255 Gender = :Gender | |
256 WHERE | |
257 PersonID = :PersonID; | |
258 END | |
259 COMMIT; | |
260 | |
261 -- Person_Delete | |
262 | |
263 CREATE PROCEDURE Person_Delete( | |
264 PersonID INTEGER | |
265 ) | |
266 AS | |
267 BEGIN | |
268 DELETE FROM Person WHERE PersonID = :PersonID; | |
269 END | |
270 COMMIT; | |
271 | |
272 -- Patient_SelectAll | |
273 | |
274 CREATE PROCEDURE Patient_SelectAll | |
275 RETURNS ( | |
276 PersonID int, | |
277 FirstName VARCHAR(50), | |
278 LastName VARCHAR(50), | |
279 MiddleName VARCHAR(50), | |
280 Gender CHAR(1), | |
281 Diagnosis VARCHAR(256) | |
282 ) | |
283 AS | |
284 BEGIN | |
285 FOR | |
286 SELECT | |
287 Person.PersonID, | |
288 FirstName, | |
289 LastName, | |
290 MiddleName, | |
291 Gender, | |
292 Patient.Diagnosis | |
293 FROM | |
294 Patient, Person | |
295 WHERE | |
296 Patient.PersonID = Person.PersonID | |
297 INTO | |
298 :PersonID, | |
299 :FirstName, | |
300 :LastName, | |
301 :MiddleName, | |
302 :Gender, | |
303 :Diagnosis | |
304 DO SUSPEND; | |
305 END | |
306 COMMIT; | |
307 | |
308 -- Patient_SelectByName | |
309 | |
310 CREATE PROCEDURE Patient_SelectByName( | |
311 FirstName VARCHAR(50), | |
312 LastName VARCHAR(50) | |
313 ) | |
314 RETURNS ( | |
315 PersonID int, | |
316 MiddleName VARCHAR(50), | |
317 Gender CHAR(1), | |
318 Diagnosis VARCHAR(256) | |
319 ) | |
320 AS | |
321 BEGIN | |
322 FOR | |
323 SELECT | |
324 Person.PersonID, | |
325 MiddleName, | |
326 Gender, | |
327 Patient.Diagnosis | |
328 FROM | |
329 Patient, Person | |
330 WHERE | |
331 Patient.PersonID = Person.PersonID | |
332 and FirstName = :FirstName and LastName = :LastName | |
333 INTO | |
334 :PersonID, | |
335 :MiddleName, | |
336 :Gender, | |
337 :Diagnosis | |
338 DO SUSPEND; | |
339 END | |
340 COMMIT; | |
341 | |
342 -- BinaryData Table | |
343 | |
344 CREATE TABLE BinaryData | |
345 ( | |
346 BinaryDataID INTEGER NOT NULL PRIMARY KEY, | |
347 Stamp INTEGER NOT NULL, | |
348 Data BLOB NOT NULL | |
349 ); | |
350 COMMIT; | |
351 | |
352 CREATE TRIGGER CREATE_BinaryDataID FOR BinaryData | |
353 BEFORE INSERT POSITION 0 | |
354 AS BEGIN | |
355 NEW.BinaryDataID = GEN_ID(PersonID, 1); | |
356 NEW.Stamp = GEN_ID(TimestampGen, 1); | |
357 END | |
358 COMMIT; | |
359 | |
360 CREATE TRIGGER CHANGE_BinaryData FOR BinaryData | |
361 beFORe update | |
362 AS BEGIN | |
363 NEW.Stamp = GEN_ID(TimestampGen, 1); | |
364 END | |
365 COMMIT; | |
366 | |
367 -- OutRefTest | |
368 | |
369 /* | |
370 Fake input parameters are used to "emulate" input/output parameters. | |
371 Each inout parameter should be defined in RETURNS(...) section | |
372 and allso have a "mirror" in input section, mirror name shoul be: | |
373 FdpDataProvider.InOutInputParameterPrefix + [parameter name] | |
374 ex: | |
375 in_inputOutputID is input mirror FOR inout parameter inputOutputID | |
376 */ | |
377 CREATE PROCEDURE OutRefTest( | |
378 ID INTEGER, | |
379 in_inputOutputID INTEGER, | |
380 str VARCHAR(50), | |
381 in_inputOutputStr VARCHAR(50) | |
382 ) | |
383 RETURNS( | |
384 inputOutputID INTEGER, | |
385 inputOutputStr VARCHAR(50), | |
386 outputID INTEGER, | |
387 outputStr VARCHAR(50) | |
388 ) | |
389 AS | |
390 BEGIN | |
391 outputID = ID; | |
392 inputOutputID = ID + in_inputOutputID; | |
393 outputStr = str; | |
394 inputOutputStr = str || in_inputOutputStr; | |
395 SUSPEND; | |
396 END | |
397 COMMIT; | |
398 | |
399 -- OutRefEnumTest | |
400 | |
401 CREATE PROCEDURE OutRefEnumTest( | |
402 str VARCHAR(50), | |
403 in_inputOutputStr VARCHAR(50) | |
404 ) | |
405 RETURNS ( | |
406 inputOutputStr VARCHAR(50), | |
407 outputStr VARCHAR(50) | |
408 ) | |
409 AS | |
410 BEGIN | |
411 outputStr = str; | |
412 inputOutputStr = str || in_inputOutputStr; | |
413 SUSPEND; | |
414 END | |
415 COMMIT; | |
416 | |
417 -- ExecuteScalarTest | |
418 | |
419 CREATE PROCEDURE Scalar_DataReader | |
420 RETURNS( | |
421 intField INTEGER, | |
422 stringField VARCHAR(50) | |
423 ) | |
424 AS | |
425 BEGIN | |
426 intField = 12345; | |
427 stringField = '54321'; | |
428 SUSPEND; | |
429 END | |
430 COMMIT; | |
431 | |
432 CREATE PROCEDURE Scalar_OutputParameter | |
433 RETURNS ( | |
434 outputInt INTEGER, | |
435 outputString VARCHAR(50) | |
436 ) | |
437 AS | |
438 BEGIN | |
439 outputInt = 12345; | |
440 outputString = '54321'; | |
441 SUSPEND; | |
442 END | |
443 COMMIT; | |
444 | |
445 /* | |
446 "Return_Value" is the name for ReturnValue "emulating" | |
447 may be changed: FdpDataProvider.ReturnParameterName | |
448 */ | |
449 CREATE PROCEDURE Scalar_ReturnParameter | |
450 RETURNS (Return_Value INTEGER) | |
451 AS | |
452 BEGIN | |
453 Return_Value = 12345; | |
454 SUSPEND; | |
455 END | |
456 COMMIT; | |
457 | |
458 -- Data Types test | |
459 | |
460 /* | |
461 Data definitions according to: | |
462 http://www.firebirdsql.org/manual/migration-mssql-data-types.html | |
463 | |
464 BUT! BLOB is ised for BINARY data! not CHAR | |
465 */ | |
466 | |
467 CREATE TABLE DataTypeTest | |
468 ( | |
469 DataTypeID INTEGER NOT NULL PRIMARY KEY, | |
470 Binary_ BLOB, | |
471 Boolean_ CHAR(1), | |
472 Byte_ SMALLINT, | |
473 Bytes_ BLOB, | |
474 CHAR_ CHAR(1), | |
475 DateTime_ TIMESTAMP, | |
476 Decimal_ DECIMAL(10, 2), | |
477 Double_ DOUBLE PRECISION, | |
478 Guid_ CHAR(38), | |
479 Int16_ SMALLINT, | |
480 Int32_ INTEGER, | |
481 Int64_ NUMERIC(11), | |
482 Money_ DECIMAL(18, 4), | |
483 SByte_ SMALLINT, | |
484 Single_ FLOAT, | |
485 Stream_ BLOB, | |
486 String_ VARCHAR(50) CHARACTER SET UNICODE_FSS, | |
487 UInt16_ SMALLINT, | |
488 UInt32_ INTEGER, | |
489 UInt64_ NUMERIC(11), | |
490 Xml_ CHAR(1000) | |
491 ) | |
492 COMMIT; | |
493 | |
494 CREATE GENERATOR DataTypeID; | |
495 COMMIT; | |
496 | |
497 CREATE TRIGGER CREATE_DataTypeTest FOR DataTypeTest | |
498 BEFORE INSERT POSITION 0 | |
499 AS BEGIN | |
500 NEW.DataTypeID = GEN_ID(DataTypeID, 1); | |
501 END | |
502 COMMIT; | |
503 | |
504 INSERT INTO DataTypeTest | |
505 (Binary_, Boolean_, Byte_, Bytes_, CHAR_, DateTime_, Decimal_, | |
506 Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_, | |
507 Single_, Stream_, String_, UInt16_, UInt32_, UInt64_, Xml_) | |
508 VALUES | |
509 ( NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |
510 NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |
511 NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
512 COMMIT; | |
513 | |
514 INSERT INTO DataTypeTest | |
515 (Binary_, Boolean_, Byte_, Bytes_, CHAR_, DateTime_, Decimal_, | |
516 Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_, | |
517 Single_, Stream_, String_, UInt16_, UInt32_, UInt64_, | |
518 Xml_) | |
519 VALUES | |
520 ('dddddddddddddddd', 1, 255,'dddddddddddddddd', 'B', 'NOW', 12345.67, | |
521 1234.567, 'dddddddddddddddddddddddddddddddd', 32767, 32768, 1000000, 12.3456, 127, | |
522 1234.123, 'dddddddddddddddd', 'string', 32767, 32768, 200000000, | |
523 '<root><element strattr="strvalue" intattr="12345"/></root>'); | |
524 COMMIT; | |
525 | |
526 | |
527 | |
528 DROP TABLE Parent COMMIT; | |
529 DROP TABLE Child COMMIT; | |
530 DROP TABLE GrandChild COMMIT; | |
531 | |
532 CREATE TABLE Parent (ParentID int, Value1 int) COMMIT; | |
533 CREATE TABLE Child (ParentID int, ChildID int) COMMIT; | |
534 CREATE TABLE GrandChild (ParentID int, ChildID int, GrandChildID int) COMMIT; | |
535 | |
536 | |
537 DROP TABLE LinqDataTypes COMMIT; | |
538 | |
539 CREATE TABLE LinqDataTypes | |
540 ( | |
541 ID int, | |
542 MoneyValue decimal(10,4), | |
543 DateTimeValue timestamp, | |
544 DateTimeValue2 timestamp, | |
545 BoolValue char(1), | |
546 GuidValue char(38), | |
547 BinaryValue blob, | |
548 SmallIntValue smallint, | |
549 IntValue int, | |
550 BigIntValue bigint | |
551 ) | |
552 COMMIT; | |
553 | |
554 DROP GENERATOR SequenceTestSeq | |
555 COMMIT; | |
556 | |
557 CREATE GENERATOR SequenceTestSeq | |
558 COMMIT; | |
559 | |
560 DROP TABLE SequenceTest COMMIT; | |
561 | |
562 CREATE TABLE SequenceTest | |
563 ( | |
564 ID int NOT NULL PRIMARY KEY, | |
565 Value_ VARCHAR(50) NOT NULL | |
566 ) | |
567 COMMIT; | |
568 | |
569 | |
570 DROP TRIGGER CREATE_ID | |
571 COMMIT; | |
572 | |
573 DROP GENERATOR TestIdentityID | |
574 COMMIT; | |
575 | |
576 DROP TABLE TestIdentity | |
577 COMMIT; | |
578 | |
579 CREATE TABLE TestIdentity ( | |
580 ID INTEGER NOT NULL PRIMARY KEY | |
581 ) | |
582 COMMIT; | |
583 | |
584 CREATE GENERATOR TestIdentityID; | |
585 COMMIT; | |
586 | |
587 CREATE TRIGGER CREATE_ID FOR TestIdentity | |
588 BEFORE INSERT POSITION 0 | |
589 AS BEGIN | |
590 NEW.ID = GEN_ID(TestIdentityID, 1); | |
591 END | |
592 COMMIT; | |
593 | |
594 | |
595 CREATE VIEW PersonView | |
596 AS | |
597 SELECT * FROM Person | |
598 COMMIT; |