Files
Database/COMSQL.H
Peter Feij 759b6b42a9 versienr
svn path=/Database/trunk/; revision=9249
2006-06-20 07:38:32 +00:00

1445 lines
52 KiB
C

#ifndef _COMSQL_H
#define _COMSQL_H
/*
* Opmerkingen:
* - gebruik ~ waar een \n gewenst is (zie bv. CREATE_TABLE())
*
* Functies aanwezig:
*
* _FAC_MODULE
* CHECK_NOG_REFERENCES()
* CHECK_REFERENCE_DEFAULTUITV()
* CHECK_REFERENCE_INST()
* CHECK_REFERENCE_ONROERENDGOED()
* CHECK_REFERENCE_SRTINST()
* CHECK_REFERENCE_UITVOERENDE()
* CHECK_UNIQUE_DEEL_KEY_OMSCHRIJVING
* CHECK_UNIQUE_KEY_OMSCHRIJVING
* CHECK_UNIQUE_OMSCHRIJVING
* CREATE_TABLE()
* CREATE_TRIGGER()
* CREATE_VIEW()
* CREATE_VOLGNR()
* DEFINIEER_VIEW_AANWEZIG()
* DEF_DEELSOORT()
* DEF_DISCIPLINE()
* DEF_FAC_ENTITY
* DEF_FAC_FORM()
* DEF_FAC_MESSAGE
* DEF_GROEPSOORT()
* DELETE_CHILDREN
* FAC_P_FAC_SAVE_RESTORE_UPDATE()
* LAAT_RUIMTE_VERVALLEN_VOOR_VERDIEPING()
* LAAT_VERDIEPING_VERVALLEN_VOOR_GEBOUW()
* NOT_NULL()
* SET_VERWIJDER_CHILDREN
* SET_VERWIJDER_CHILDREN2
* UPDATE_PRIMARY_KEY()
* UPDATE_UPPER()
* UPDATE_VOLGNR()
* UPDATE_WEEKINGAVE
* BEGIN_MODULE(m)
* SQL_(SQLRegel)
* SQL_MODULE(SQLRegel)
* END_MODULE(m)
* UPDATE_VERSION(n)
*/
/*
* In principe moeten alle tabellen en views aangemaakt worden met
* CREATE_TABLE() resp. CREATE_VIEW() om ook het toekennen van geschikte
* roles af te dwingen (uitzondering is table fac_privilege)
*
* (S)elect, (I)nsert, (D)elete, (U)pdate
*
* level small full archive
* ----- ----- ---- -------
* 1 SIDU SIDU SIDU ; bv. tijdelijke tabellen
* 2 S SIDU SIDU ; normale tabellen
* 3 S S SIDU ; bibliotheek tabellen
* 4 - - - ; tabellen die niet mogen worden ingezien
*
* Since 4.60, privileges are not used any more, so these are really dummies.
*/
#define BASIS_PRIVILEGE 0
#define NORMAAL_PRIVILEGE 0
#define BIBLIOTHEEK_PRIVILEGE 0
#define ALG_MODULE_OFFSET 0
#define ALG_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define ALG_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define ALG_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define FAC_MODULE_OFFSET ALG_MODULE_OFFSET
#define FAC_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define FAC_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define FAC_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define INS_MODULE_OFFSET 10
#define INS_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define INS_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define INS_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define PRS_MODULE_OFFSET 20
#define PRS_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define PRS_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define PRS_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define MLD_MODULE_OFFSET 30
#define MLD_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define MLD_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define MLD_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define RES_MODULE_OFFSET 70
#define RES_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define RES_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define RES_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define BEZ_MODULE_OFFSET 80
#define BEZ_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define BEZ_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define BEZ_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define WEB_MODULE_OFFSET 90
#define WEB_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define WEB_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define WEB_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define CNT_MODULE_OFFSET 100
#define CNT_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define CNT_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define CNT_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define BES_MODULE_OFFSET 110
#define BES_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define BES_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define BES_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
#define SCH_MODULE_OFFSET 120
#define SCH_BASIS_PRIVILEGE BASIS_PRIVILEGE
#define SCH_NORMAAL_PRIVILEGE NORMAAL_PRIVILEGE
#define SCH_BIBLIOTHEEK_PRIVILEGE BIBLIOTHEEK_PRIVILEGE
// #define MS_SQL
#ifdef MS_SQL
#define _LEFT_JOIN(table,where) \
left outer join table on where
#define SET_VERWIJDER_CHILDREN(child_table, parent_key, parent_verwijder, \
child_verwijder, table) \
BEGIN \
UPDATE child_table \
SET child_verwijder = i.parent_verwijder \
from inserted i left outer join deleted d \
on i.__T__##table##__KEY=d.__T__##table##__KEY \
WHERE child_table.parent_key = i.parent_key \
AND child_verwijder is null \
and (i.parent_verwijder IS NOT NULL OR \
(i.parent_verwijder IS NULL AND d.parent_verwijder IS NOT NULL)) \
; END
#define CHECK_REFERENCE_UITVOERENDE(key_veld, message) \
BEGIN \
DECLARE @d1 int; \
DECLARE @d2 int; \
select @d1=min(c),@d2=max(c) from( \
select count(*) c \
from mld_v_uitvoerende \
WHERE MLD_UITVOERENDE_KEY in(select key_veld from inserted \
where key_veld IS NOT NULL) \
group by MLD_UITVOERENDE_KEY) x; \
if @d1<>1 or @d2<>1 \
APPLICATION_ERROR(-20000, message); \
END
#define _SPOOL(x)
#define BOOLEAN int
#define _ORACLE(x)
#define _ORACLE1(x)
#define _MSSQL(x) x
#define _EQ_OLD(x,y) \
x in (select y from deleted)
#define _FAC_MODULE(module,omschrijving) \
INSERT INTO fac_module (fac_module_name, fac_module_version, fac_module_date, fac_module_remark, fac_module_extern) \
VALUES (module,'04.61.0',CONVERT(VARCHAR,GETDATE(),112),omschrijving, 1);
#define CREATE_TABLE(table_name, level) \
CREATE TABLE table_name
#define APPLICATION_ERROR(code,text) \
BEGIN \
declare @errmsg varchar(256); \
set @errmsg = text; \
RAISERROR(@errmsg,16,code); \
ROLLBACK TRAN \
END
#define APPLICATION_ERROR_GOTO(code,text) \
BEGIN \
declare @errmsg varchar(256); \
set @errmsg = text; \
RAISERROR(@errmsg,16,code); \
ROLLBACK TRAN \
GOTO lerror \
END
#define SHOW SELECT
#define PROMPT --
#define PROMPT1(x) -- #x
#define PROMPT2(x,y) -- #x+","+#y
#define _IDENTITY(x,y) \
IDENTITY(x,y)
#define _TYPE(tab,fld) \
__T__##tab##__##fld##__TYPE
#define NUMBER \
DECIMAL
#define MONEY \
MONEY
#define DATE \
DATETIME
#define SYSDATE \
GETDATE()
#define NVL(c,v) \
ISNULL(c,v)
#define VARCHAR2 \
VARCHAR
#define NVARCHAR2 \
NVARCHAR
#define LPAD \
WEB.LPAD
#define RPAD \
WEB.RPAD
#define TRUNC_DATE(x) \
web.TRUNC_DATE(x, 'DDD')
#define INITCAP(x) \
web.INITCAP(x)
#define INSTR2(a, b) \
CHARINDEX(b, a)
#define INSTR(a, b, c) \
CHARINDEX(b, a, c)
#define LONG \
TEXT
#define _LONG_RAW \
IMAGE
#define _INTO_VAR(x)
#define _CONCAT \
+
#define CHR(x) \
CHAR(x)
#define LENGTH \
LEN
#define SUBSTR(a,b,c) \
SUBSTRING(a,b,c)
#define SUBSTR2(a,b) \
SUBSTRING(a,b,8000)
#define _ALTER_MODIFY_START \
ALTER COLUMN
#define _ALTER_ADD_START \
ADD
#define _ALTER_END \
#define CREATE_SEQUENCE(sequence_name, minval)
#define CREATE_VIEW(view_name, level) \
IF EXISTS (SELECT TABLE_NAME \
FROM INFORMATION_SCHEMA.VIEWS \
WHERE TABLE_NAME = #@view_name~ \
AND TABLE_SCHEMA = 'dbo')~ \
DROP VIEW dbo.view_name;~ \
GO~CREATE VIEW dbo.view_name
#define CREATE_TRIGGER(trigger_name) \
IF EXISTS (SELECT name FROM sysobjects \
WHERE name = #@trigger_name \
AND type = 'TR')~ \
DROP TRIGGER trigger_name;~GO~CREATE TRIGGER trigger_name
#define _END_TRIGGER() \
END;~GO
#define CREATE_PROCEDURE(pack_name, proc_name) \
IF EXISTS (SELECT name \
FROM sysobjects \
WHERE name = N'proc_name' \
AND type = 'P') \
DROP PROCEDURE proc_name
#define _CREATE_OR_REPLACE \
CREATE
#define _RETURN_LENGTH(x) \
(x)
#define _DECLARE_VAR(x) \
DECLARE @x
#define _SET_VAR(x) \
SET @x
#define _VAR(x) \
@x
#define _ASSIGN \
=
#define _RETURNS \
RETURNS
#define _AS \
AS
#define _GO \
~GO
#define _GO2 \
~GO
#define TRUE \
1
#define FALSE \
0
#define _NOTFOUND(x) \
@@FETCH_STATUS = -1
#define EXCEPTION
#define WHEN \
end if
#define NO_DATA_FOUND \
@@rowcount<1
#define TOO_MANY_ROWS \
@@rowcount>1
#define OTHERS \
1=2
#define _FOR(i,a,b) \
set i=(a)-1; while i<(b) begin set i=i+1;
#define _LOOP \
while 1=1 begin
#define _END_LOOP \
end
#define _EXIT \
break
#define _FROM_DUAL
#define _EXEC0(p) \
exec p
#define _EXEC1(p,a1) \
exec p a1
#define _EXEC2(p,a1,a2) \
exec p a1,a2
#define _EXEC3(p,a1,a2,a3) \
exec p a1,a2,a3
#define _EXEC4(p,a1,a2,a3, a4) \
exec p a1,a2,a3,a4
#define _EXEC5(p,a1,a2,a3,a4,a5) \
exec p a1,a2,a3,a4,a5
#define _EXEC6(p,a1,a2,a3,a4,a5,a6) \
exec p a1,a2,a3,a4,a5,a6
#define _INTO1(x) \
x=
#define _INTO2(x)
#define _INTO3(x)
#define _DUMMY1_FROM \
declare @cnt decimal;~select @cnt=count(*) from
#define _DUMMY1_WHEN1 \
if @cnt = 1 begin
#define _DUMMY1_WHEN0 \
if @cnt = 0 begin
#define _DUMMY1_WHEN2 \
if @cnt > 0 begin
#define _DUMMY1_END1 \
end;
#define _DUMMY1_END2
#define SUBSTRB SUBSTR
#define _U_NEW
#define _U_OLD
#define _U_UPDATE(table,field,new) \
update table set field = new \
where __T__##table##__KEY in(select __T__##table##__KEY from inserted)
#define UPDATE_UPPER(omschrijving,upper_omschrijving,table) \
update table \
set upper_omschrijving = UPPER(omschrijving) \
where __T__##table##__KEY in(select __T__##table##__KEY from inserted)
#define _BEFORE_INSERT_OR_UPDATE(TableName) \
on TableName after insert, update as
#define _AFTER_UPDATE(TableName) \
on TableName after update as
#define _BEFORE_UPDATE(TableName) \
on TableName after update as
#define _BEFORE_INSERT_OR_UPDATE_OR_DELETE(TableName) \
on TableName after insert, update, delete as
#define _AFTER_INSERT_OR_UPDATE_OR_DELETE(TableName) \
on TableName after insert, update, delete as
#define _AFTER_INSERT_OR_UPDATE(TableName) \
on TableName after insert, update as
#define _BEFORE_DELETE(TableName) \
on TableName after delete as
#define UPDATE_AANMAAKDATUM(TableName, Datum_veld) \
update TableName set Datum_veld = GetDATE() \
where __T__##TableName##__KEY in(select __T__##TableName##__KEY from inserted)
#define _OR_REPLACE
#define _FOR_EACH_ROW
#define _CC \
+
#define _OPLUS
#define _OSTAR \
*
#define _DECODE_BEGIN \
CASE
#define _DECODE_WHEN \
when
#define _DECODE_THEN \
THEN
#define _DECODE_ELSE \
ELSE
#define _DECODE_END \
END
#define _SET_SQLS(x) \
SET x~GO
#define _SET_ORACLE(x)
#define _THEN \
begin
#define _ELSE \
end else begin
#define _ELSIF \
end else if
#define _END_IF \
end;
#define _FOUND(x) \
@@FETCH_STATUS = 0
#define _IN_PACKAGE(pak,fp,fname) \
GO~CREATE fp pak.fname
#define _INPUT \
#define _OUTPUT(x) \
x OUTPUT
#define _DATEPART(x,y) \
CONVERT(char,DATEPART(y,x))
#define DATE_TO_CHAR \
web.DATE_TO_CHAR
#define NUMBER_TO_CHAR \
web.NUMBER_TO_CHAR
#define _MOD \
%
#define _NUM2HM(x) \
DatePart(hh,x) + DatePart(mi,x)/60
#define TO_CHAR(x) \
RTRIM(CONVERT(char,x))
#define TO_NUMBER(x) \
CONVERT(decimal,x)
#define TO_DATE(x) \
CONVERT(DATETIME,x)
#define _TO_NUMBER2(x,y) \
web.CHAR_TO_NUMBER(x,y)
#define _TO_DATE2(x,y) \
web.CHAR_TO_DATE(x,y)
#define _DECLARE_CURSOR(x) \
DECLARE x
#define _CURSOR_PARAM(x)
#define _CURSOR_PARAM2(x,y)
#define _CURSOR_PARAM3(x,y,z)
#define _CURSOR_FOR \
CURSOR LOCAL FOR
#define _OPEN_CURSOR1(query, s, rec) \
OPEN query; \
~ FETCH NEXT FROM query INTO s; \
~ WHILE (@@FETCH_STATUS <> -1 ) \
~ BEGIN
#define _OPEN_CURSOR2(query, s, rec, key) \
OPEN query; \
~ FETCH NEXT FROM query INTO s; \
~ WHILE (@@FETCH_STATUS <> -1 ) \
~ BEGIN
#define _CLOSE_CURSOR(query, s) \
FETCH NEXT FROM query INTO s; \
~ END; \
~ CLOSE query; \
~ DEALLOCATE query;
#define _BEGIN_SQLS_PROC \
AS BEGIN
#define _BEGIN_ORA_PROC \
#define _END_PROC \
END~GO
#define UPDATE_PRIMARY_KEY(primary_key, sequence_primary_key) \
#define CHECK_UNIQUE_OMSCHRIJVING(tabel, upper_omschrijving, \
exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
IF EXISTS (SELECT 'X' \
FROM tabel \
GROUP BY upper_omschrijving \
HAVING COUNT(*) > 1) \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING);
#define CHECK_UNIQUE_KEY_OMSCHRIJVING(tabel, key, upper_omschrijving, \
exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
IF EXISTS (SELECT 'X' \
FROM tabel \
GROUP BY key, upper_omschrijving \
HAVING COUNT(*) > 1) \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING);
#define CHECK_UNIQUE_DEEL_KEY_OMSCHRIJVING(tabel, up_key, naast_key, \
upper_omschrijving, exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
IF EXISTS (SELECT 'X' \
FROM tabel \
GROUP BY up_key, naast_key, upper_omschrijving \
HAVING COUNT(*) > 1) \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING);
#define LAAT_VERDIEPING_VERVALLEN_VOOR_GEBOUW(exc_msg_VERDIEPING_IN_GEBRUIK) \
UPDATE alg_verdieping \
set alg_verdieping.alg_verdieping_verwijder = i.alg_gebouw_verwijder \
from inserted i \
where i.alg_gebouw_verwijder IS NOT NULL \
and alg_verdieping.alg_gebouw_key=i.alg_gebouw_key
#define LAAT_RUIMTE_VERVALLEN_VOOR_VERDIEPING(exc_msg_RUIMTE_IN_GEBRUIK) \
UPDATE alg_ruimte \
set alg_ruimte.alg_ruimte_verwijder = i.alg_verdieping_verwijder \
from inserted i \
where i.alg_verdieping_verwijder IS NOT NULL \
and alg_ruimte.alg_verdieping_key = i.alg_verdieping_key
#define CHECK_NOG_REFERENCES(tabel,tabel_verwijder_veld,reference_view, \
key_veld,message) \
if (select count(*) \
from inserted i,deleted d,reference_view \
where i.key_veld = d.key_veld \
and i.tabel_verwijder_veld IS NOT NULLDATUM \
and reference_view.key_veld = d.key_veld)>0 \
APPLICATION_ERROR_GOTO(-20000,message)
#define CHECK_REFERENCE_INST(key_veld, message) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigdeel \
WHERE ins_deel_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigonderdeel \
WHERE ins_onderdeel_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigelement \
WHERE ins_element_key = :new.key_veld) \
APPLICATION_ERROR(-20000, message);
#define CHECK_REFERENCE_SRTINST(key_veld, message) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigsrtdeel \
WHERE ins_srtdeel_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigsrtonderdeel \
WHERE ins_srtonderdeel_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM ins_v_aanwezigsrtelement \
WHERE ins_srtelement_key = :new.key_veld) \
APPLICATION_ERROR(-20000, message);
#define CHECK_REFERENCE_ONROERENDGOED(key_veld, message) \
IF NOT EXISTS (SELECT 'X' \
FROM alg_v_aanwezigruimte \
WHERE alg_ruimte_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM alg_v_aanwezigverdieping \
WHERE alg_verdieping_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM alg_v_aanweziggebouw \
WHERE alg_gebouw_key = :new.key_veld) \
IF NOT EXISTS (SELECT 'X' \
FROM alg_v_aanwezigterreinsector \
WHERE alg_terreinsector_key = :new.key_veld) \
APPLICATION_ERROR_GOTO(-20000,message); \
#define USER_TABLES INFORMATION_SCHEMA.TABLES \
WHERE TABLE_CATALOG = 'FAC' AND TABLE_TYPE = 'BASE TABLE' \
AND TABLE_CATALOG = USER
#define USER_VIEWS INFORMATION_SCHEMA.VIEWS \
WHERE TABLE_CATALOG = 'FAC' AND TABLE_CATALOG = USER
#define USER_INDEXES sysindexes i, INFORMATION_SCHEMA.TABLES t \
WHERE i.id = object_id(t.table_name) AND \
table_catalog = 'FAC' AND table_type = 'BASE TABLE'
#define USER_TRIGGERS sysobjects where type = 'TR'
#define USER_CONSTRAINTS sysobjects where type in ('C','F','K')
#define USER_SEQUENCES \
(SELECT DISTINCT name FROM syscolumns where status > 127) X
#define CEIL \
CEILING
#else // MS_SQL :-> ORACLE
#define _LEFT_JOIN(table,where) \
, table
#define SET_VERWIJDER_CHILDREN(child_table, parent_key, parent_verwijder, \
child_verwijder, table) \
BEGIN \
IF :new.parent_verwijder IS NOT NULL OR \
(:new.parent_verwijder IS NULL AND :old.parent_verwijder IS NOT NULL) \
THEN \
UPDATE child_table \
SET child_verwijder = :new.parent_verwijder \
WHERE \
child_table.parent_key = :new.parent_key \
AND child_verwijder is null; \
END IF; \
END
#define CHECK_REFERENCE_UITVOERENDE(key_veld, message) \
DECLARE \
dummy CHAR; \
BEGIN \
IF :new.key_veld IS NOT NULL \
THEN \
SELECT 'X' INTO dummy \
FROM mld_v_uitvoerende \
WHERE MLD_UITVOERENDE_KEY = :new.key_veld; \
END IF; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
APPLICATION_ERROR(-20000, message); \
END
#define CREATE_TABLE(table_name, level) \
CREATE TABLE table_name
#define _SPOOL(x) \
SPOOL x
#define _ORACLE(x) x
#define _ORACLE1(x) x,
#define _MSSQL(x)
#define _EQ_OLD(x,y) \
x = :old.y
#define PROMPT1(x) \
PROMPT x
#define PROMPT2(x,y) \
PROMPT x,y
#define _SET_SQLS(x)
#define _SET_ORACLE(x) \
SET x
#define _INTO_VAR(x) \
INTO x
#define CREATE_SEQUENCE(sequence_name, minval) \
CREATE SEQUENCE sequence_name MINVALUE minval;
#define CREATE_VIEW(view_name, level) \
CREATE OR REPLACE FORCE VIEW view_name
#define CREATE_TRIGGER(trigger_name) \
CREATE OR REPLACE TRIGGER trigger_name
#define _END_TRIGGER() \
END;~/
#define CREATE_PROCEDURE(pack_name, proc_name) \
CREATE OR REPLACE PROCEDURE proc_name
#define MONEY \
NUMBER
#define VARCHAR \
VARCHAR2
#define _LONG_RAW \
LONG RAW
#define _CONCAT \
||
#define _ALTER_MODIFY_START \
MODIFY
#define _ALTER_ADD_START \
ADD (
#define _ALTER_END \
)
#define _IDENTITY(x,y)
#define _TYPE(tab,fld) \
tab.fld%TYPE
#define _CREATE_OR_REPLACE \
CREATE OR REPLACE
#define _RETURN_LENGTH(x) \
#define _DECLARE_VAR(x) \
x
#define _SET_VAR(x) \
x
#define _VAR(x) \
x
#define _ASSIGN \
:=
#define _RETURNS \
RETURN
#define _AS \
IS
#define _GO \
;
#define _GO2 \
;~/
#define _NOTFOUND(x) \
x%NOTFOUND
#define INSTR2(a, b) \
INSTR(a, b)
#define SUBSTR2 \
SUBSTR
#define TRUNC_DATE \
TRUNC
#define _LOOP \
loop
#define _FOR(i,a,b) \
FOR i in a .. b loop
#define _END_LOOP \
end loop
#define _EXIT \
exit
#define _FROM_DUAL \
FROM DUAL
#define _EXEC0(p) \
p
#define _EXEC1(p,a1) \
p(a1)
#define _EXEC2(p,a1,a2) \
p(a1,a2)
#define _EXEC3(p,a1,a2,a3) \
p(a1,a2,a3)
#define _EXEC4(p,a1,a2,a3, a4) \
p(a1,a2,a3,a4)
#define _EXEC5(p,a1,a2,a3,a4,a5) \
p(a1,a2,a3,a4,a5)
#define _EXEC6(p,a1,a2,a3,a4,a5,a6) \
p(a1,a2,a3,a4,a5,a6)
#define _INTO1(x)
#define _INTO2(x) \
INTO x
#define _INTO3(x) \
,x
#define _DUMMY1_FROM \
DECLARE dummy CHAR;~BEGIN~SELECT 'X' INTO dummy FROM
#define _DUMMY1_WHEN1
#define _DUMMY1_WHEN0 \
EXCEPTION WHEN NO_DATA_FOUND THEN
#define _DUMMY1_WHEN2 \
WHEN TOO_MANY_ROWS THEN
#define _DUMMY1_END1
#define _DUMMY1_END2 \
end;
#define _U_NEW \
:new.
#define _U_OLD \
:old.
#define _U_UPDATE(table,field,new) \
field := new;
#define UPDATE_UPPER(omschrijving, upper_omschrijving,tab) \
:new.upper_omschrijving := UPPER(:new.omschrijving)
#define _BEFORE_INSERT_OR_UPDATE(TableName) \
BEFORE INSERT OR UPDATE ON TableName
#define _AFTER_UPDATE(TableName) \
AFTER UPDATE ON TableName
#define _BEFORE_UPDATE(TableName) \
BEFORE UPDATE ON TableName
#define _BEFORE_INSERT_OR_UPDATE_OR_DELETE(TableName) \
BEFORE INSERT OR UPDATE OR DELETE ON TableName
#define _AFTER_INSERT_OR_UPDATE_OR_DELETE(TableName) \
AFTER INSERT OR UPDATE OR DELETE ON TableName
#define _AFTER_INSERT_OR_UPDATE(TableName) \
AFTER INSERT OR UPDATE ON TableName
#define _BEFORE_DELETE(TableName) \
BEFORE DELETE ON TableName
#define UPDATE_AANMAAKDATUM(TableName, Datum_veld) \
BEGIN \
IF :new.Datum_veld IS NULL \
THEN \
:new.Datum_veld := SYSDATE; \
END IF; \
END
#define _OR_REPLACE \
OR REPLACE
#define _FOR_EACH_ROW \
FOR EACH ROW
#define _CC \
||
#define _OPLUS \
(+)
#define _OSTAR
#define _DECODE_BEGIN \
DECODE(
#define _DECODE_WHEN \
,
#define _DECODE_THEN \
,
#define _DECODE_ELSE \
,
#define _DECODE_END \
)
#define _THEN \
THEN
#define _FOUND(x) \
x%FOUND = TRUE
#define _IN_PACKAGE(pak,fp,fname) \
fp fname
#define _INPUT \
IN
#define _OUTPUT(x) \
OUT x
#define _DATEPART(x,y) \
TO_CHAR(x,#@y)
#define DATE_TO_CHAR \
TO_CHAR
#define NUMBER_TO_CHAR \
TO_CHAR
#define _MOD \
MOD
#define _NUM2HM(x) \
TO_NUMBER(TO_CHAR(x,'HH24.MI'))
#define _TO_CHAR(x) \
TO_CHAR(x)
#define _TO_NUMBER(x) \
TO_NUMBER(x)
#define _TO_NUMBER2(x,y) \
TO_NUMBER(x,y)
#define _TO_DATE(x) \
TO_DATE(x)
#define _TO_DATE2(x,y) \
TO_DATE(x,y)
#define _DECLARE_CURSOR(x) \
CURSOR x
#define _CURSOR_PARAM(x) \
(x)
#define _CURSOR_PARAM2(x,y) \
(x,y)
#define _CURSOR_PARAM3(x,y,z) \
(x,y,z)
#define _CURSOR_FOR \
IS
#define _OPEN_CURSOR1(query, s, rec) \
FOR rec IN query LOOP
#define _OPEN_CURSOR2(query, s, rec, key) \
FOR rec IN query(key) LOOP
// , val s := rec.val;
#define _CLOSE_CURSOR(query, s) \
END LOOP;
#define _BEGIN_SQLS_PROC \
AS
#define _BEGIN_ORA_PROC \
BEGIN
#define _END_PROC \
END;~/
#define _END_IF \
END IF;
#define _ELSE \
ELSE
#define _ELSIF \
ELSIF
#define _FAC_MODULE(module,omschrijving) \
INSERT INTO fac_module (fac_module_name, fac_module_version, fac_module_date, fac_module_remark, fac_module_extern) \
VALUES (module,'04.61.0',TO_CHAR(SYSDATE,'YYYYMMDD'),omschrijving, 1);
#define APPLICATION_ERROR(code,text) raise_application_error(code, text)
#define APPLICATION_ERROR_GOTO(code,text) raise_application_error(code, text)
#define UPDATE_PRIMARY_KEY(primary_key, sequence_primary_key) \
IF :new.primary_key IS NULL \
THEN SELECT sequence_primary_key.nextval INTO :new.primary_key \
FROM DUAL; \
END IF
#define CHECK_UNIQUE_OMSCHRIJVING(tabel, upper_omschrijving, \
exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
DECLARE \
dummy CHAR := 'N'; \
BEGIN \
SELECT 'X' INTO dummy \
FROM tabel \
GROUP BY upper_omschrijving \
HAVING COUNT(*) > 1; \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
EXCEPTION \
WHEN NO_DATA_FOUND \
THEN NULL; \
\
WHEN TOO_MANY_ROWS \
THEN APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
END
#define CHECK_UNIQUE_KEY_OMSCHRIJVING(tabel, key, upper_omschrijving, \
exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
DECLARE \
dummy CHAR := 'N'; \
BEGIN \
SELECT 'X' INTO dummy \
FROM tabel \
GROUP BY key, upper_omschrijving \
HAVING COUNT(*) > 1; \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
EXCEPTION \
WHEN NO_DATA_FOUND \
THEN NULL; \
\
WHEN TOO_MANY_ROWS \
THEN APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
END
#define CHECK_UNIQUE_DEEL_KEY_OMSCHRIJVING(tabel, up_key, naast_key, \
upper_omschrijving, exc_msg_GEEN_OMSCHRIJVING, \
exc_msg_BESTAANDE_OMSCHRIJVING) \
DECLARE \
dummy CHAR := 'N'; \
BEGIN \
SELECT 'X' INTO dummy \
FROM tabel \
GROUP BY up_key, naast_key, upper_omschrijving \
HAVING COUNT(*) > 1; \
APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
EXCEPTION \
WHEN NO_DATA_FOUND \
THEN NULL; \
\
WHEN TOO_MANY_ROWS \
THEN APPLICATION_ERROR(-20001, exc_msg_BESTAANDE_OMSCHRIJVING); \
END
#define LAAT_VERDIEPING_VERVALLEN_VOOR_GEBOUW(exc_msg_VERDIEPING_IN_GEBRUIK) \
BEGIN \
IF :new.alg_gebouw_verwijder IS NOT NULL \
AND :old.alg_gebouw_verwijder IS NULL \
THEN \
UPDATE alg_verdieping \
SET alg_verdieping_verwijder = :new.alg_gebouw_verwijder \
WHERE \
alg_verdieping.alg_gebouw_key = :new.alg_gebouw_key; \
END IF; \
EXCEPTION \
WHEN NO_DATA_FOUND \
THEN APPLICATION_ERROR(-20000, exc_msg_VERDIEPING_IN_GEBRUIK); \
\
WHEN TOO_MANY_ROWS \
THEN APPLICATION_ERROR(-20000, exc_msg_VERDIEPING_IN_GEBRUIK); \
END
#define LAAT_RUIMTE_VERVALLEN_VOOR_VERDIEPING(exc_msg_RUIMTE_IN_GEBRUIK) \
BEGIN \
IF :new.alg_verdieping_verwijder IS NOT NULL \
AND :old.alg_verdieping_verwijder IS NULL \
THEN \
UPDATE alg_ruimte \
SET alg_ruimte_verwijder = :new.alg_verdieping_verwijder \
WHERE \
alg_ruimte.alg_verdieping_key = :new.alg_verdieping_key; \
END IF; \
EXCEPTION \
WHEN NO_DATA_FOUND \
THEN APPLICATION_ERROR(-20000, exc_msg_RUIMTE_IN_GEBRUIK); \
\
WHEN TOO_MANY_ROWS \
THEN APPLICATION_ERROR(-20000, exc_msg_RUIMTE_IN_GEBRUIK); \
END
#define CHECK_NOG_REFERENCES(tabel,tabel_verwijder_veld,reference_view, \
key_veld,message) \
DECLARE \
dummy CHAR; \
BEGIN \
IF :new.tabel_verwijder_veld IS NOT NULLDATUM \
AND :old.tabel_verwijder_veld IS NULLDATUM \
THEN \
SELECT 'x' INTO dummy \
FROM reference_view \
WHERE reference_view.key_veld = :old.key_veld; \
APPLICATION_ERROR(-20000,message); \
END IF; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
NULL; \
WHEN TOO_MANY_ROWS THEN \
APPLICATION_ERROR(-20000,message); \
END
#define CHECK_REFERENCE_INST(key_veld, message) \
DECLARE \
dummy CHAR; \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigdeel \
WHERE ins_deel_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigonderdeel \
WHERE ins_onderdeel_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigelement \
WHERE ins_element_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
APPLICATION_ERROR(-20000, message); \
END; \
END; \
END
#define CHECK_REFERENCE_SRTINST(key_veld, message) \
DECLARE \
dummy CHAR; \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigsrtdeel \
WHERE ins_srtdeel_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigsrtonderdeel \
WHERE ins_srtonderdeel_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM ins_v_aanwezigsrtelement \
WHERE ins_srtelement_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
APPLICATION_ERROR(-20000, message); \
END; \
END; \
END
#define CHECK_REFERENCE_ONROERENDGOED(key_veld, message) \
DECLARE \
dummy CHAR; \
BEGIN \
SELECT 'X' INTO dummy \
FROM alg_v_aanwezigruimte \
WHERE alg_ruimte_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM alg_v_aanwezigverdieping \
WHERE alg_verdieping_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM alg_v_aanweziggebouw \
WHERE alg_gebouw_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
BEGIN \
SELECT 'X' INTO dummy \
FROM alg_v_aanwezigterreinsector \
WHERE alg_terreinsector_key = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
APPLICATION_ERROR(-20000,message); \
END; \
END; \
END; \
END
#define CEIL \
CEIL
#endif // MS_SQL / ORACLE
#define NULLDATUM NULL
#define CREATE_VOLGNR(volgnr_srt, volgnr_periode) \
INSERT INTO fac_volgnrs (fac_volgnr_srt, fac_volgnr_periode) \
VALUES(volgnr_srt, volgnr_periode)
#define UPDATE_VOLGNR(key_veld, fac_volgnr_srt) \
IF :new.key_veld IS NULL \
THEN \
:new.key_veld := FAC_P_FAC_VOLGNR.FAC_VOLGNR_NEXTVAL(fac_volgnr_srt); \
END IF
#define DEFINIEER_VIEW_AANWEZIG(table, verwijder_veld, view_name, level) \
CREATE_VIEW (view_name,level) AS \
SELECT * \
FROM table \
WHERE table.verwijder_veld IS NULLDATUM
#define CHECK_REFERENCE_DEFAULTUITV(key_veld, message) \
DECLARE \
dummy CHAR; \
BEGIN \
SELECT 'X' INTO dummy \
FROM mld_v_defaultuitv \
WHERE bco_defaultuitv_keys = :new.key_veld; \
EXCEPTION \
WHEN NO_DATA_FOUND THEN \
APPLICATION_ERROR(-20000, message); \
END
#define UPDATE_WEEKINGAVE(weekingave_veld) \
BEGIN \
:new.weekingave_veld := to_number( \
to_char(:new.mld_opdr_datumbegin, 'YYWW')); \
END
#define SET_VERWIJDER_CHILDREN2(child_table, parent_key, child_key, parent_verwijder, \
child_verwijder) \
BEGIN \
IF :new.parent_verwijder IS NOT NULL OR \
(:new.parent_verwijder IS NULL AND :old.parent_verwijder IS NOT NULL) \
THEN \
UPDATE child_table \
SET child_verwijder = :new.parent_verwijder \
WHERE \
child_table.child_key = :new.parent_key; \
END IF; \
END
#define DELETE_CHILDREN(child_table, parent_key) \
BEGIN \
DELETE FROM child_table \
WHERE child_table.parent_key = :new.parent_key; \
END
#ifdef LANG_EN
#define DEF_FAC_ENTITY(a,b,c,d.e) INSERT INTO fac_entity_name VALUES (a,e,c,d)
#define DEF_FAC_MESSAGE(a,b,c) INSERT INTO fac_message VALUES (a,c)
#else
#define DEF_FAC_ENTITY(a,b,c,d,e) INSERT INTO fac_entity_name VALUES (a,b,c,d)
#define DEF_FAC_MESSAGE(a,b,c) INSERT INTO fac_message VALUES (a,b)
#endif
#define DEF_FAC_FUNCTIE (c, o, m, l) INSERT INTO fac_functie (fac_functie_code, fac_functie_omschrijving,fac_functie_module,fac_functie_min_level) VALUES(c, o, m, l)
#define UPD_FAC_FUNCTIE (c, o, m, l) UPDATE fac_functie SET fac_functie_omschrijving=0,fac_functie_module=m,fac_functie_min_level=l) WHERE fac_functie_code=c
#define DEF_FAC_FUNCTIE2(c, o, m, l, d, i) INSERT INTO fac_functie (fac_functie_code, fac_functie_omschrijving,fac_functie_module,fac_functie_min_level, fac_functie_discipline, fac_functie_info) VALUES(c, o, m, l, d, i)
#define UPD_FAC_FUNCTIE2(c, o, m, l, d, i) UPDATE fac_functie SET fac_functie_omschrijving=0,fac_functie_module=m,fac_functie_min_level=l, fac_functie_discipline=d, fac_functie_info=i) WHERE fac_functie_code=c
// NOT_NULL(): Columnconstraint ipv. NOT NULL, De melding ORA-1400: mandatory (NOT NULL)...
// geeft de constraintnaam niet, zodat de meding niet vertaald kan worden.
// De CHECK() geeft het wel, dus wordt deze gebruikt.
#define NOT_NULL(column, constraint_name) CONSTRAINT constraint_name CHECK(column IS NOT NULL)
/* Doorloop de onthouden PrimaryKeys via FAC_P_FAC_SAVE_RESTORE en roep voor elke key de functie Func
* aan. Deze doet de uiteindelijke actie.
* Func krijgt als argument de key (NUMBER) mee en moet een BOOLEAN teruggeven.
* Zie ook commentaar in FAC_PAC.SRC.
*/
#define FAC_P_FAC_SAVE_RESTORE_UPDATE(Func, TableName) \
_ORACLE(DECLARE) \
_DECLARE_VAR(IndexNr) NUMBER; \
_DECLARE_VAR(PrimaryKey) NUMBER(10); \
_DECLARE_VAR(Dummy) BOOLEAN; \
_ORACLE(BEGIN) \
_SET_VAR(IndexNr) _ASSIGN 1; \
_SET_VAR(PrimaryKey) _ASSIGN fac_p_fac_save_restore.GetPrimaryKey(TableName, _VAR(IndexNr)); \
WHILE _VAR(PrimaryKey) IS NOT NULL \
_ORACLE(LOOP)_MSSQL(begin) \
_ORACLE( _SET_VAR(Dummy) _ASSIGN Func(PrimaryKey) ); \
_MSSQL( _EXEC1( Func, _VAR(PrimaryKey)) ); \
_SET_VAR(IndexNr) _ASSIGN _VAR(IndexNr) + 1; \
_SET_VAR(PrimaryKey) _ASSIGN fac_p_fac_save_restore.GetPrimaryKey(TableName, _VAR(IndexNr)); \
_END_LOOP; \
_MSSQL( _EXEC1( fac_p_fac_save_restore.ResetSelectie, TableName) ); \
_ORACLE(Dummy := fac_p_fac_save_restore.ResetSelectie(TableName)); \
_ORACLE(END)
#ifdef NO_FSN1141
#define DEFINE_MODULE_ROLES(module, modnr) \
SELECT 'CREATE ROLE '||USER||'_'||module||'_SMALL_ROLE;' FROM dual; \
~SELECT 'CREATE ROLE '||USER||'_'||module||'_FULL_ROLE;' FROM dual; \
~SELECT 'CREATE ROLE '||USER||'_'||module||'_ARCHIVE_ROLE;' FROM dual; \
\
~SELECT 'GRANT '||USER||'_'||module||'_SMALL_ROLE TO '||USER||'_'||module||'_FULL_ROLE;' FROM dual; \
~SELECT 'GRANT '||USER||'_'||module||'_FULL_ROLE TO '||USER||'_'||module||'_ARCHIVE_ROLE;' FROM dual; \
\
/* Tables */ \
~SELECT 'GRANT select ON ' || UT.table_name ||' TO '||USER||'_'||module||'_SMALL_ROLE;' \
FROM user_tables UT, fac_privilege FP \
WHERE UT.table_name = UPPER(FP.object_name) \
AND FP.security_level IN (modnr+1,modnr+2,modnr+3) \
ORDER BY UT.table_name; \
~SELECT 'GRANT insert,delete,update ON ' || UT.table_name ||' TO '||USER||'_'||module||'_SMALL_ROLE;' \
FROM user_tables UT, fac_privilege FP \
WHERE UT.table_name = UPPER(FP.object_name) \
AND FP.security_level = modnr+1 \
ORDER BY UT.table_name; \
~SELECT 'GRANT insert,delete,update ON ' || UT.table_name ||' TO '||USER||'_'||module||'_FULL_ROLE;' \
FROM user_tables UT, fac_privilege FP \
WHERE UT.table_name = UPPER(FP.object_name) \
AND FP.security_level = modnr+2 \
ORDER BY UT.table_name; \
~SELECT 'GRANT insert,delete,update ON ' || UT.table_name ||' TO '||USER||'_'||module||'_ARCHIVE_ROLE;' \
FROM user_tables UT, fac_privilege FP \
WHERE UT.table_name = UPPER(FP.object_name) \
AND FP.security_level = modnr+3 \
ORDER BY UT.table_name; \
/* Views */ \
~SELECT 'GRANT select /*,insert,delete,update*/ ON ' || UV.view_name ||' TO '||USER||'_'||module||'_SMALL_ROLE;' \
FROM user_views UV, fac_privilege FP \
WHERE UV.view_name = UPPER(FP.object_name) \
AND FP.security_level IN (modnr+1,modnr+2,modnr+3) \
ORDER BY UV.view_name; \
~SELECT 'UPDATE fac_module SET fac_module_extern=1 WHERE fac_module_name='''||module||''';' FROM dual; \
~PROMPT commit;
#endif
/* Macros voor het vullen van de INS bibliotheek in INS_DATA.SRC */
#define DEF_DISCIPLINE(ldis)\
INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_min_level) \
VALUES('INS', SUBSTR(ldis ,1, 30), 1)
#define DEF_GROEPSOORT(ldis, lgrp)\
INSERT INTO ins_srtgroep (ins_discipline_key, ins_srtgroep_module, ins_srtgroep_omschrijving) \
SELECT ins_discipline_key, 'INS', SUBSTR(lgrp, 1,30) FROM ins_tab_discipline \
WHERE SUBSTR(UPPER(ins_discipline_omschrijving),1,30) = SUBSTR(UPPER(ldis),1,30)
#define DEF_DEELSOORT(ldis, lgrp, lds, lsym, lcode)\
INSERT INTO ins_srtdeel \
(ins_srtgroep_key, ins_srtdeel_module, ins_srtdeel_code, \
ins_srtdeel_acadsymbol, ins_srtdeel_omschrijving,ins_srtdeel_dimensie) \
SELECT ins_srtgroep_key, 'INS', lcode ,lsym, SUBSTR(lds,1,30), 0 \
FROM ins_srtgroep \
WHERE SUBSTR(UPPER(ins_srtgroep_omschrijving),1,30) = SUBSTR(UPPER(lgrp),1,30)
#define BEGIN_MODULE(m) \
DECLARE ~\
dummy VARCHAR2(1); ~\
BEGIN ~\
SELECT 'x'INTO dummy ~\
FROM fac_module ~\
WHERE fac_module_name = UPPER(#@m);
#define SQL_SPOOL(SQLRegel) \
dbms_output.put_line(#@SQLRegel);
#define END_MODULE(m) \
EXCEPTION ~\
WHEN NO_DATA_FOUND THEN dbms_output.put_line('--Module ' ||#@m|| ' niet aanwezig'); ~\
END; ~/
#define UPDMOD(m, n) \
BEGIN_MODULE(m) ~\
SQL_SPOOL(START n.m) ~\
END_MODULE(m)
#define UPDATE_VERSION(n) \
UPDATE FAC_MODULE SET fac_module_VERSION=n
#define __T__USER_OBJECTS__OBJECT_TYPE__TYPE \
VARCHAR2(50)
#define __T__ins_discipline__ins_discipline_key__TYPE \
NUMBER(10)
#endif // _COMSQL_H