Skip to content

Commit db8c7c2

Browse files
unknownunknown
authored andcommitted
Versão inicial
0 parents  commit db8c7c2

File tree

4 files changed

+290
-0
lines changed

4 files changed

+290
-0
lines changed

compile.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
flex sqlscriptparser.lex
2+
bison -d sqlscriptparser.y
3+
gcc sqlscriptparser.tab.c lex.yy.c -o myparser.out

sqlscriptparser.lex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
%{
2+
#include "sqlscriptparser.tab.h"
3+
%}
4+
%option noyywrap
5+
%%
6+
"(" /*ignore*/
7+
[ ]*(DAT|COD|DES|IND|JSON|XML|IDT|NUM|FLG|NAM)\_[A-Z0-9\_]+ { yylval.sval = strdup(yytext); return COLUMN;}
8+
"CREATE TABLE" { yylval.sval = strdup(yytext); return CREATE_TABLE;}
9+
"CREATE INDEX" { yylval.sval = strdup(yytext); return CREATE_INDEX;}
10+
"ALTER TABLE" { yylval.sval = strdup(yytext); return ALTER_TABLE;}
11+
[A-Z]+\_ADM\.[A-Z\_0-9]+ { yylval.sval = strdup(yytext); return OWNER_OBJECT;}
12+
[A-Z\_]+\_FK { yylval.sval = strdup(yytext); return FK_NAME;}
13+
"FOREIGN KEY" { yylval.sval = strdup(yytext); return FK;}
14+
[A-Z\_]+\_CK[0-9]* { yylval.sval = strdup(yytext); return CHECK_NAME;}
15+
[ ]+CHECK[ ]* { yylval.sval = strdup(yytext); return CHECK;}
16+
"ADD CONSTRAINT" { yylval.sval = strdup(yytext); return ADD_CONSTRAINT;}
17+
"\n" {return FIM_COMANDO;}
18+
")" {}
19+
"/" {}
20+
"'" {}
21+
"-" {}
22+
";" {}
23+
"=" {}
24+
":" {}
25+
">" {}
26+
"<" {}
27+
"." {}
28+
"*" {}
29+
[\sA-Z0-9\_a-z\(\)\,]* /*ignore*/
30+
%%
31+

sqlscriptparser.y

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
%{
2+
#include<stdio.h>
3+
#include<string.h>
4+
#include<stdlib.h>
5+
#include <unistd.h>
6+
void yyerror(char *);
7+
extern char * yytext;
8+
9+
void changedir(char *);
10+
%}
11+
12+
%union {
13+
char *sval;
14+
}
15+
16+
%token <sval> OWNER_OBJECT
17+
18+
%token <sval> COMANDO
19+
%token <sval> CREATE_TABLE
20+
%token <sval> CREATE_INDEX
21+
%token <sval> ALTER_TABLE
22+
%token <sval> FK
23+
%token <sval> FK_NAME
24+
%token <sval> ADD_CONSTRAINT
25+
%token <sval> COLUMN
26+
27+
%token <sval> CHECK
28+
%token <sval> CHECK_NAME
29+
30+
%token FIM_COMANDO
31+
%start linhas
32+
33+
%%
34+
linhas :
35+
| linhas instrucao
36+
;
37+
38+
instrucao: CREATE_TABLE OWNER_OBJECT FIM_COMANDO {
39+
char *owner;
40+
char *object;
41+
owner = strtok ($2,".");
42+
object = strtok (NULL, ".");
43+
char str[1024];
44+
strcpy(str,"select case count(1) when 1 then 'ok' else 'error' end from dba_tables t where t.owner='");
45+
strcat(str,owner);
46+
strcat(str,"' and t.table_name='");
47+
strcat(str,object);
48+
strcat(str,"';");
49+
printf("\n--CREATE TABLE\n%s\n",str);
50+
//printf("select case count(1) when 1 then 'ok' else 'error' end from dba_tables t where t.owner='%s' and t.table_name='%s';\n",owner,object);
51+
}
52+
53+
| CREATE_INDEX OWNER_OBJECT OWNER_OBJECT FIM_COMANDO {
54+
char *owner;
55+
char *object;
56+
owner = strtok ($2,".");
57+
object = strtok (NULL, ".");
58+
char str[1024];
59+
strcpy(str,"select case count(1) when 1 then 'ok' else 'error' end from dba_indexes t where t.owner='");
60+
strcat(str,owner);
61+
strcat(str,"' and t.index_name='");
62+
strcat(str,object);
63+
strcat(str,"';");
64+
printf("\n--CREATE INDEX\n%s\n",str);
65+
//printf("select case count(1) when 1 then 'ok' else 'error' end from dba_indexes t where t.owner='%s' and t.index_name='%s';\n",owner,object);
66+
}
67+
| ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT FK_NAME FK OWNER_OBJECT FIM_COMANDO {
68+
char *owner;
69+
char *object;
70+
owner = strtok ($2,".");
71+
char str[1024];
72+
strcpy(str,"select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='");
73+
strcat(str,owner);
74+
strcat(str,"' and t.constraint_name='");
75+
strcat(str,$4);
76+
strcat(str,"';");
77+
printf("\n--ADD CONSTRAINT FK\n%s\n",str);
78+
//printf("select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='%s' and t.constraint_name='%s';\n",owner,$4);
79+
}
80+
81+
| ALTER_TABLE OWNER_OBJECT COLUMN FIM_COMANDO { char *owner;
82+
char *object;
83+
owner = strtok ($2,".");
84+
object = strtok (NULL, ".");
85+
char str[1024];
86+
strcpy(str,"select case count(1) when 1 then 'ok' else 'error' end from dba_tab_columns t where t.owner='");
87+
strcat(str,owner);
88+
strcat(str,"' and t.table_name='");
89+
strcat(str,object);
90+
strcat(str,"' and t.column_name='");
91+
strcat(str,$3);
92+
strcat(str,"';");
93+
printf("\n--ADD COLUMN\n%s\n",str);
94+
//printf("select case count(1) when 1 then 'ok' else 'error' end from dba_tab_columns t where t.owner='%s' and t.table_name='%s' and t.column_name='%s';\n",owner,object,$3);
95+
}
96+
97+
| ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT CHECK_NAME CHECK COLUMN FIM_COMANDO {
98+
char *owner;
99+
char *object;
100+
owner = strtok ($2,".");
101+
char str[1024];
102+
strcpy(str,"select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='");
103+
strcat(str,owner);
104+
strcat(str,"' and t.constraint_name='");
105+
strcat(str,$4);
106+
strcat(str,"';");
107+
printf("\n--ADD CHECK CONSTRAINT\n%s\n",str);
108+
//printf("select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='%s' and t.constraint_name='%s';\n",owner,$4);
109+
}
110+
111+
112+
| FIM_COMANDO {}
113+
| OWNER_OBJECT {}
114+
| FK_NAME {}
115+
| COLUMN {}
116+
//
117+
;
118+
119+
%%
120+
121+
int main(int argc, char **argv)
122+
{
123+
124+
return yyparse();
125+
}
126+
127+
/* função usada pelo bison para dar mensagens de erro */
128+
void yyerror(char *msg)
129+
{
130+
fprintf(stderr, "erro: %s \n", msg);
131+
}

teste.txt

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
2+
ALTER TABLE SAFEPAY_ADM.TRANSACTION_CHECKOUT ADD CONSTRAINT TRANCHEC_CK01 CHECK( IND_CHECKOUT_TYPE IN ('W',)) ENABLE NOVALIDATE;
3+
4+
ALTER TABLE SAFEPAY_ADM.TRANSACTION_CHECKOUT ADD CONSTRAINT TRANCHEC_CK01 CHECK (IND_CHECKOUT_TYPE IN ('W', 'L', 'T', 'G', 'M', 'A', 'V')) ENABLE NOVALIDATE;
5+
6+
DECLARE
7+
RESOURCE_BUSY EXCEPTION;
8+
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
9+
NAOEXECUTOU BOOLEAN := TRUE;
10+
BEGIN
11+
WHILE NAOEXECUTOU
12+
LOOP
13+
BEGIN
14+
EXECUTE IMMEDIATE 'ALTER TABLE SAFEPAY_ADM.PRESENTATION_COMPONENT_CONFIG ADD NAM_XML VARCHAR2(60)';
15+
NAOEXECUTOU := FALSE;
16+
EXCEPTION
17+
WHEN RESOURCE_BUSY THEN
18+
DBMS_LOCK.SLEEP(SECONDS => 1);
19+
WHEN OTHERS THEN
20+
RAISE;
21+
END;
22+
END LOOP;
23+
END;
24+
/
25+
26+
CREATE INDEX SAFEPAY_ADM.PROM_IDX02 ON SAFEPAY_ADM.PROMOTION (IDT_PAYMENT_REQUEST_MODEL) TABLESPACE TSISAFEPAY01 INITRANS 8 ONLINE;
27+
28+
DECLARE
29+
RESOURCE_BUSY EXCEPTION;
30+
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
31+
NAOEXECUTOU BOOLEAN := TRUE;
32+
BEGIN
33+
WHILE NAOEXECUTOU
34+
LOOP
35+
BEGIN
36+
EXECUTE IMMEDIATE 'ALTER TABLE SAFEPAY_ADM.PRE_APPROVAL_PAYMENT_ORDER ADD DAT_RETRY DATE NULL';
37+
NAOEXECUTOU := FALSE;
38+
DBMS_OUTPUT.PUT_LINE('COLUNA DAT_RETRY ADICIONADA');
39+
EXCEPTION
40+
WHEN RESOURCE_BUSY THEN
41+
DBMS_LOCK.SLEEP(SECONDS =>1);
42+
WHEN OTHERS THEN
43+
RAISE;
44+
END;
45+
END LOOP;
46+
END;
47+
/
48+
COMMENT ON COLUMN SAFEPAY_ADM.PRE_APPROVAL_PAYMENT_ORDER.DAT_RETRY IS 'DATA DE RETENTATIVA DA ORDEM DE PAGAMENTO';
49+
50+
51+
-- 02: RAFAEL RIBALDO - ISTAMBUL - 01/08/16 - 09:00
52+
DECLARE
53+
RESOURCE_BUSY EXCEPTION;
54+
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
55+
NAOEXECUTOU BOOLEAN := TRUE;
56+
BEGIN
57+
WHILE NAOEXECUTOU
58+
LOOP
59+
BEGIN
60+
EXECUTE IMMEDIATE 'ALTER TABLE SAFEPAY_ADM.PROMOTION ADD IDT_PAYMENT_REQUEST_MODEL NUMBER(10,0) NULL';
61+
NAOEXECUTOU := FALSE;
62+
DBMS_OUTPUT.PUT_LINE('COLUNA IDT_PAYMENT_REQUEST_MODEL ADICIONADA');
63+
EXCEPTION
64+
WHEN RESOURCE_BUSY THEN
65+
DBMS_LOCK.SLEEP(SECONDS =>1);
66+
WHEN OTHERS THEN
67+
RAISE;
68+
END;
69+
END LOOP;
70+
END;
71+
/
72+
COMMENT ON COLUMN SAFEPAY_ADM.PROMOTION.IDT_PAYMENT_REQUEST_MODEL IS 'REFERENCIA A CONFIGURACAO DE SOLICITACAO DE PAGAMENTO';
73+
74+
-- 03
75+
-- FK
76+
DECLARE
77+
RESOURCE_BUSY EXCEPTION;
78+
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
79+
NAOEXECUTOU BOOLEAN := TRUE;
80+
BEGIN
81+
WHILE NAOEXECUTOU
82+
LOOP
83+
BEGIN
84+
EXECUTE IMMEDIATE 'ALTER TABLE SAFEPAY_ADM.PROMOTION ADD CONSTRAINT PAYMREQUMODE_PROM_FK FOREIGN KEY (IDT_PAYMENT_REQUEST_MODEL) REFERENCES SAFEPAY_ADM.PAYMENT_REQUEST_MODEL (IDT_PAYMENT_REQUEST_MODEL) ENABLE NOVALIDATE';
85+
NAOEXECUTOU := FALSE;
86+
DBMS_OUTPUT.PUT_LINE('CONSTRAINT PAYMREQUMODE_PROM_FK ADICIONADA');
87+
EXCEPTION
88+
WHEN RESOURCE_BUSY THEN
89+
DBMS_LOCK.SLEEP(SECONDS =>1);
90+
WHEN OTHERS THEN
91+
RAISE;
92+
END;
93+
END LOOP;
94+
END;
95+
/
96+
97+
-- 04
98+
-- INDEX P/ FK
99+
CREATE INDEX SAFEPAY_ADM.PROM_IDX02 ON SAFEPAY_ADM.PROMOTION (IDT_PAYMENT_REQUEST_MODEL) TABLESPACE TSISAFEPAY01 INITRANS 8 ONLINE;
100+
101+
102+
103+
104+
105+
106+
DECLARE
107+
RESOURCE_BUSY EXCEPTION;
108+
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
109+
NAOEXECUTOU BOOLEAN := TRUE;
110+
BEGIN
111+
WHILE NAOEXECUTOU
112+
LOOP
113+
BEGIN
114+
EXECUTE IMMEDIATE 'ALTER TABLE SAFEPAY_ADM.TRANSACTION_CHECKOUT ADD CONSTRAINT TRANCHEC_CK01 CHECK (IND_CHECKOUT_TYPE IN (''W'', ''L'', ''T'', ''G'', ''M'', ''A'', ''V'')) ENABLE NOVALIDATE';
115+
NAOEXECUTOU := FALSE;
116+
DBMS_OUTPUT.PUT_LINE('RECRIADA TRANCHEC_CK01');
117+
EXCEPTION
118+
WHEN RESOURCE_BUSY THEN
119+
DBMS_LOCK.SLEEP(SECONDS =>1);
120+
WHEN OTHERS THEN
121+
RAISE;
122+
END;
123+
END LOOP;
124+
END;
125+
/

0 commit comments

Comments
 (0)