Skip to content

Commit 5349bbf

Browse files
committed
Add Oracle package T4SQL.CMD ...
1 parent 5348322 commit 5349bbf

19 files changed

+261
-44
lines changed

T4SQLTemplateLibrary/Databases/Oracle/T4SQLDB/Scripts/1-Tables/03-EVENT_LOG.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CREATE TABLE T4SQL.EVENT_LOG
22
(
3-
LOG_TIME TIMESTAMP(3) NOT NULL,
3+
LOG_TIME TIMESTAMP(3) DEFAULT SYSTIMESTAMP NOT NULL,
44
LOG_TYPE NVARCHAR2(16),
55
REFERENCE_ NVARCHAR2(256),
66
MESSAGE_ VARCHAR2(4000)

T4SQLTemplateLibrary/Databases/Oracle/T4SQLDB/Scripts/3-Views/03-VW_FOREIGN_KEY_COLUMNS.sql

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,24 @@ ORDER BY
3636
FC.POSITION
3737

3838
WITH READ ONLY;
39+
40+
----------------------------------------------------------------------------------------------------
41+
--
42+
-- Copyright 2013 Abel Cheng
43+
-- This source code is subject to terms and conditions of the Apache License, Version 2.0.
44+
-- See http://www.apache.org/licenses/LICENSE-2.0.
45+
-- All other rights reserved.
46+
-- You must not remove this notice, or any other, from this software.
47+
--
48+
-- Original Author: Abel Cheng <[email protected]>
49+
-- Created Date: ??November ?04, ?2013, 11:05:07 PM
50+
-- Primary Host: http://t4sql.codeplex.com
51+
-- Change Log:
52+
-- Author Date Comment
53+
--
54+
--
55+
--
56+
--
57+
-- (Keep code clean)
58+
--
59+
----------------------------------------------------------------------------------------------------

T4SQLTemplateLibrary/Databases/Oracle/T4SQLDB/Scripts/4-Packages/01-META.pck

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,46 +26,52 @@ FUNCTION PARSENAME
2626
(
2727
inQualified_Name VARCHAR2,
2828
inObject_Piece PLS_INTEGER
29-
) RETURN VARCHAR2;
29+
) RETURN VARCHAR2;
3030

3131

3232
FUNCTION EXISTS_TABLE
3333
(
34-
inSchema_Name VARCHAR2,
35-
inTable_Name VARCHAR2
36-
) RETURN BOOLEAN;
34+
inSchema_Name VARCHAR2,
35+
inTable_Name VARCHAR2
36+
) RETURN BOOLEAN;
3737

3838
FUNCTION EXISTS_TABLE
3939
(
4040
inQualified_Name VARCHAR2
41-
) RETURN BOOLEAN;
41+
) RETURN BOOLEAN;
42+
43+
44+
FUNCTION QUALIFIED_NAME
45+
(
46+
inFull_Name VARCHAR2
47+
) RETURN VARCHAR2;
4248

4349

4450
FUNCTION MATCH_TABLE_DEFINITION
4551
(
46-
inRef_Schema VARCHAR2,
47-
inRef_Table VARCHAR2,
48-
inTst_Schema VARCHAR2,
49-
inTst_Table VARCHAR2
50-
) RETURN BOOLEAN;
52+
inRef_Schema VARCHAR2,
53+
inRef_Table VARCHAR2,
54+
inTst_Schema VARCHAR2,
55+
inTst_Table VARCHAR2
56+
) RETURN BOOLEAN;
5157

5258

5359
PROCEDURE EXECUTE_AUTONOMOUS
5460
(
55-
inSql_Stmt VARCHAR2
61+
inSql_Stmt VARCHAR2
5662
);
5763

5864
PROCEDURE EXECUTE_AUTONOMOUS
5965
(
60-
inSql_Stmt CLOB
66+
inSql_Stmt CLOB
6167
);
6268

6369

6470
PROCEDURE GET_TABLE_IN_TRIGGER
6571
(
66-
inCall_Stack VARCHAR2, -- DBMS_UTILITY.FORMAT_CALL_STACK
67-
outTab_Schema OUT VARCHAR2,
68-
outTab_Name OUT VARCHAR2
72+
inCall_Stack VARCHAR2, -- DBMS_UTILITY.FORMAT_CALL_STACK
73+
outTab_Schema OUT VARCHAR2,
74+
outTab_Name OUT VARCHAR2
6975
);
7076

7177

@@ -92,10 +98,10 @@ PROCEDURE CREATE_PROPERTY_VIEW
9298

9399
PROCEDURE CREATE_WORKSPACE
94100
(
95-
inWorkitem_Table VARCHAR2,
96-
inProperty_Table VARCHAR2,
97-
inWorkspace_Description NVARCHAR2,
98-
inAutonomous_Owner NVARCHAR2
101+
inWorkitem_Table VARCHAR2,
102+
inProperty_Table VARCHAR2,
103+
inWorkspace_Description NVARCHAR2,
104+
inAutonomous_Owner NVARCHAR2
99105
);
100106

101107

@@ -108,7 +114,7 @@ FUNCTION PARSENAME
108114
(
109115
inQualified_Name VARCHAR2,
110116
inObject_Piece PLS_INTEGER
111-
) RETURN VARCHAR2
117+
) RETURN VARCHAR2
112118
IS
113119
tName VARCHAR2(64);
114120
BEGIN
@@ -136,7 +142,7 @@ FUNCTION EXISTS_TABLE
136142
(
137143
inSchema_Name VARCHAR2,
138144
inTable_Name VARCHAR2
139-
) RETURN BOOLEAN
145+
) RETURN BOOLEAN
140146
IS
141147
tCount PLS_INTEGER;
142148
BEGIN
@@ -155,7 +161,7 @@ END EXISTS_TABLE;
155161
FUNCTION EXISTS_TABLE
156162
(
157163
inQualified_Name VARCHAR2
158-
) RETURN BOOLEAN
164+
) RETURN BOOLEAN
159165
IS
160166
tSchema_Name VARCHAR2(30) := PARSENAME(inQualified_Name, 2);
161167
tTable_Name VARCHAR2(30) := PARSENAME(inQualified_Name, 1);
@@ -164,13 +170,25 @@ BEGIN
164170
END EXISTS_TABLE;
165171

166172

173+
FUNCTION QUALIFIED_NAME
174+
(
175+
inFull_Name VARCHAR2
176+
) RETURN VARCHAR2
177+
IS
178+
tSchema_Name VARCHAR2(30) := PARSENAME(inFull_Name, 2);
179+
tTable_Name VARCHAR2(30) := PARSENAME(inFull_Name, 1);
180+
BEGIN
181+
RETURN DBMS_ASSERT.SQL_OBJECT_NAME(tSchema_Name || '.' || tTable_Name);
182+
END QUALIFIED_NAME;
183+
184+
167185
FUNCTION MATCH_TABLE_DEFINITION
168186
(
169187
inRef_Schema VARCHAR2,
170188
inRef_Table VARCHAR2,
171189
inTst_Schema VARCHAR2,
172190
inTst_Table VARCHAR2
173-
) RETURN BOOLEAN
191+
) RETURN BOOLEAN
174192
IS
175193
tMismatched PLS_INTEGER;
176194
BEGIN
@@ -304,7 +322,7 @@ AFTER INSERT OR UPDATE ON ' || inWorkitem_Table || '
304322
FOR EACH ROW
305323
BEGIN
306324
T4SQL.META.COPY_PROPERTY_DEFAULT(DBMS_UTILITY.FORMAT_CALL_STACK, :new.WORKITEM_NAME, :new.TEMPLATE_NAME);
307-
END;');
325+
END');
308326
END CREATE_WORKITEM_TRIGGER;
309327

310328

@@ -345,17 +363,16 @@ ORDER BY
345363
P.WORKITEM_NAME,
346364
S.PROPERTY_ORDER,
347365
S.PROPERTY_NAME
348-
349-
;';
366+
';
350367
END CREATE_PROPERTY_VIEW;
351368

352369

353370
PROCEDURE CREATE_WORKSPACE
354371
(
355-
inWorkitem_Table VARCHAR2,
356-
inProperty_Table VARCHAR2,
357-
inWorkspace_Description NVARCHAR2,
358-
inAutonomous_Owner NVARCHAR2
372+
inWorkitem_Table VARCHAR2,
373+
inProperty_Table VARCHAR2,
374+
inWorkspace_Description NVARCHAR2,
375+
inAutonomous_Owner NVARCHAR2
359376
) AS
360377
tWorkitem_Schema VARCHAR2(30) := PARSENAME(inWorkitem_Table, 2);
361378
tWorkitem_Table VARCHAR2(30) := PARSENAME(inWorkitem_Table, 1);
@@ -404,7 +421,7 @@ BEGIN
404421
CONSTRAINT FK_' || tWorkitem_Table || '_CLS FOREIGN KEY (TEMPLATE_NAME)
405422
REFERENCES T4SQL.TEMPLATE_CLASS(FULL_NAME)
406423
ON DELETE CASCADE
407-
);';
424+
)';
408425

409426
EXECUTE IMMEDIATE 'CREATE TABLE ' || tQualified_Property || '
410427
(
@@ -417,7 +434,7 @@ BEGIN
417434
CONSTRAINT FK_' || tProperty_Table || '_WI FOREIGN KEY (WORKITEM_NAME)
418435
REFERENCES ' || tQualified_Workitem || '(WORKITEM_NAME)
419436
ON DELETE CASCADE
420-
);';
437+
)';
421438

422439
INSERT INTO T4SQL.WORKSPACE_ENTRY
423440
(

T4SQLTemplateLibrary/Databases/Oracle/T4SQLDB/Scripts/4-Packages/03-CMD.pck

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,92 @@ PROCEDURE BUILD_SCRIPTS
4141
inSearch_Conditions VARCHAR2,
4242
outGenerated_Scripts OUT CLOB
4343
) AS
44+
TYPE NAME_ARRAY IS TABLE OF NVARCHAR2(32) INDEX BY PLS_INTEGER;
45+
tWorkitem_Names NAME_ARRAY;
46+
tSQL VARCHAR2(2000);
47+
tHas_Condition BOOLEAN;
48+
tStart_Build CHAR(1);
49+
tObject_Code CLOB;
50+
tCompiled_Error NVARCHAR2(2000);
4451
BEGIN
45-
IF NOT T4SQL.META.EXISTS_TABLE(inWorkitem_Table) THEN
46-
RAISE_APPLICATION_ERROR(-20942, 'inWorkitem_Table table does not exist in the database');
52+
tSQL := 'SELECT WORKITEM_NAME FROM ' || inWorkitem_Table;
53+
54+
tHas_Condition := RTRIM(inSearch_Conditions) IS NOT NULL;
55+
IF tHas_Condition THEN
56+
tSQL := tSQL || ' WHERE ' || inSearch_Conditions;
57+
END IF;
58+
59+
tSQL := tSQL || ' ORDER BY BUILD_ORDER NULLS LAST, WORKITEM_NAME';
60+
61+
EXECUTE IMMEDIATE tSQL BULK COLLECT INTO tWorkitem_Names;
62+
63+
IF tWorkitem_Names.COUNT > 0 THEN
64+
outGenerated_Scripts := '------------------ Started at: ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || ' ------------------
65+
';
66+
ELSE
67+
outGenerated_Scripts := '------------------ None workitem to build ------------------';
68+
RETURN;
4769
END IF;
4870

71+
tSQL := 'UPDATE ' || inWorkitem_Table || ' SET START_BUILD = ''Y'' WHERE START_BUILD = ''N''';
72+
73+
IF tHas_Condition THEN
74+
tSQL := tSQL || ' AND (' || inSearch_Conditions || ')';
75+
END IF;
76+
77+
EXECUTE IMMEDIATE tSQL;
78+
79+
tSQL := 'SELECT START_BUILD, OBJECT_CODE, COMPILED_ERROR FROM ' || inWorkitem_Table || ' WHERE WORKITEM_NAME = :workitem_name';
80+
81+
DBMS_LOCK.SLEEP(6);
82+
83+
FOR i IN tWorkitem_Names.FIRST .. tWorkitem_Names.LAST
84+
LOOP
85+
DBMS_LOB.APPEND(outGenerated_Scripts, '
86+
------------------ Build started workitem: ' || tWorkitem_Names(i) || ' ------------------
87+
');
88+
89+
FOR attempt IN 1..60
90+
LOOP
91+
tStart_Build := NULL;
92+
tObject_Code := NULL;
93+
tCompiled_Error := NULL;
94+
95+
EXECUTE IMMEDIATE tSQL INTO tStart_Build, tObject_Code, tCompiled_Error USING tWorkitem_Names(i);
96+
97+
EXIT WHEN tStart_Build = 'N';
98+
99+
DBMS_LOCK.SLEEP(3);
100+
END LOOP;
101+
102+
IF tStart_Build IS NULL THEN
103+
DBMS_LOB.APPEND(outGenerated_Scripts, '
104+
------------------ Error: The workitem has been deleted by others ------------------
105+
');
106+
CONTINUE;
107+
ELSIF tStart_Build = 'Y' THEN
108+
DBMS_LOB.APPEND(outGenerated_Scripts, '
109+
------------------ Error: Template Engine is down ------------------
110+
');
111+
EXIT;
112+
END IF;
113+
114+
IF tCompiled_Error IS NULL THEN
115+
DBMS_LOB.APPEND(outGenerated_Scripts, tObject_Code);
116+
ELSE
117+
DBMS_LOB.APPEND(outGenerated_Scripts, '/*
118+
' || tCompiled_Error || '
119+
*/');
120+
END IF;
121+
122+
DBMS_LOB.APPEND(outGenerated_Scripts, '
123+
------------------ Build ended - workitem: ' || tWorkitem_Names(i) || ' ------------------
124+
');
125+
126+
END LOOP;
127+
128+
DBMS_LOB.APPEND(outGenerated_Scripts, '
129+
------------------ Build Total: ' || TO_CHAR(tWorkitem_Names.COUNT) || ' Workitems. Ended at: '|| TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || ' ------------------');
49130

50131
END BUILD_SCRIPTS;
51132

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
1-
CREATE OR REPLACE TRIGGER T4SQL.TRG_WORKSPACE_ENTRY_DEL
1+
CREATE OR REPLACE TRIGGER T4SQL.TRG_WORKSPACE_ENTRY_DEL
22
BEFORE DELETE ON T4SQL.WORKSPACE_ENTRY
33
FOR EACH ROW
44
BEGIN
55
IF :old.WORKITEM_TABLE_NAME = 'T4SQL.SEED_WORKITEM' AND :old.PROPERTY_TABLE_NAME = 'T4SQL.SEED_PROPERTY' THEN
66
RAISE_APPLICATION_ERROR(-21001, 'Built-in workspace T4SQL.SEED_... cannot be deleted!');
77
END IF;
88
END;
9+
10+
----------------------------------------------------------------------------------------------------
11+
--
12+
-- Copyright 2013 Abel Cheng
13+
-- This source code is subject to terms and conditions of the Apache License, Version 2.0.
14+
-- See http://www.apache.org/licenses/LICENSE-2.0.
15+
-- All other rights reserved.
16+
-- You must not remove this notice, or any other, from this software.
17+
--
18+
-- Original Author: Abel Cheng <[email protected]>
19+
-- Created Date: ‎November ‎02, 2013, ‏‎11:45:03 PM
20+
-- Primary Host: http://t4sql.codeplex.com
21+
-- Change Log:
22+
-- Author Date Comment
23+
--
24+
--
25+
--
26+
--
27+
-- (Keep code clean)
28+
--
29+
----------------------------------------------------------------------------------------------------
930
/

T4SQLTemplateLibrary/Databases/Oracle/T4SQLDB/Scripts/5-Triggers/03-TRG_WORKSPACE_ENTRY_INS.trg

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CREATE OR REPLACE TRIGGER T4SQL.TRG_WORKSPACE_ENTRY_INS
1+
CREATE OR REPLACE TRIGGER T4SQL.TRG_WORKSPACE_ENTRY_INS
22
BEFORE INSERT OR UPDATE ON T4SQL.WORKSPACE_ENTRY
33
FOR EACH ROW
44
DECLARE
@@ -41,7 +41,32 @@ BEGIN
4141
RAISE_APPLICATION_ERROR(-21002, 'Tables definition of add-in workspace is not compatible with built-in workspace T4SQL.SEED_...!');
4242
END IF;
4343

44+
IF INSERTING THEN
45+
:new.WORKSPACE_ID := T4SQL.SEQ_WORKSPACE_ID.NEXTVAL;
46+
END IF;
47+
4448
-- Create trigger for each new workspace to auto-copy properties' default values while inserting a new workitem.
4549
T4SQL.META.CREATE_WORKITEM_TRIGGER(:new.WORKITEM_TABLE_NAME);
4650
END;
51+
52+
----------------------------------------------------------------------------------------------------
53+
--
54+
-- Copyright 2013 Abel Cheng
55+
-- This source code is subject to terms and conditions of the Apache License, Version 2.0.
56+
-- See http://www.apache.org/licenses/LICENSE-2.0.
57+
-- All other rights reserved.
58+
-- You must not remove this notice, or any other, from this software.
59+
--
60+
-- Original Author: Abel Cheng <[email protected]>
61+
-- Created Date: ‎November ‎03, 2013, ‏‎1:18:48 AM
62+
-- Primary Host: http://t4sql.codeplex.com
63+
-- Change Log:
64+
-- Author Date Comment
65+
--
66+
--
67+
--
68+
--
69+
-- (Keep code clean)
70+
--
71+
----------------------------------------------------------------------------------------------------
4772
/
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
INSERT INTO T4SQL.ENGINE_CONFIG (ELEMENT_NAME, NUMBER_VALUE, DATE_VALUE, STRING_VALUE, DESCRIPTION_)
2+
VALUES ('POLL_INTERVAL', 5, null, '', 'Engine Polling Interval (Seconds).');
3+
4+
INSERT INTO T4SQL.ENGINE_CONFIG (ELEMENT_NAME, NUMBER_VALUE, DATE_VALUE, STRING_VALUE, DESCRIPTION_)
5+
VALUES ('STANDBY_BEAT', null, to_date('2013-01-01', 'yyyy-mm-dd'), '', 'Heartbeat of Standby Pump Service.');
6+
7+
INSERT INTO T4SQL.ENGINE_CONFIG (ELEMENT_NAME, NUMBER_VALUE, DATE_VALUE, STRING_VALUE, DESCRIPTION_)
8+
VALUES ('PRIMARY_BEAT', null, to_date('2013-01-01', 'yyyy-mm-dd'), '', 'Heartbeat of Primary Pump Service.');
9+
10+
COMMIT;

0 commit comments

Comments
 (0)