I am processing some DML produced by an automatic tool. Unfortunately, some of the data contained carriage return and line feed characters, which caused the data to be spread across several rows. I need to joing them back together, to make valid insert statements.
Sample data is:-
W.R.T. the sample data,
yields
I want to get the DML_STRING of 781
concatenated with CR/LF,
concatenated with the DML_STRING of 782
concatenated with CR/LF,
concatenated with the DML_STRING of 783.
Row 784 contains the word "INSERT" so it denotes the start of the next insert statement. It requires the above concatenation but with the content of rows 785 and 786.
Note that there are a variable number of rows involved. It just so happens that my example joins 3 rows, but this can vary, so the solution has to cater for an unknown number of rows.
Regards
T
Sample data is:-
Code:
CREATE TABLE SQL_SERVER_AUDITLOGBTSTATS
(
ROW_NUMBER NUMBER,
DML_STRING VARCHAR2(4000 BYTE),
TABLE_NAME VARCHAR2(4000 BYTE)
);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (771, 'SET IDENTITY_INSERT AuditLogBTStats ON', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (772, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (44, ''23'',''StartSearch( 23)'',''Product = ''''*''''', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (773, 'Suppliers = ''''*''''', 'SUPPLIERS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (774, 'Clinicians = ''''*''''', 'CLINICIANS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (775, 'Month = 0Year = 0', 'MONTH');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (776, 'Dates = 01/02/2005 to 28/02/2005', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (777, 'Pat Cat = ''''*''''', 'PAT CAT');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (778, 'Reasons = ''''*''''', 'REASONS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (779, 'Sorting on = SURNAME Order = A', 'SORTING ON');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (780, ''', CAST(0x0000962801273890 AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (781, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (45, ''18'',''StartSearch( 18)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (782, 'Dates = 01/06/2005 to 30/06/2005', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (783, ''', CAST(0x0000968400ADD978 AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (784, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (46, ''18'',''StartSearch( 18)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (785, 'Dates = 01/07/2005 to 31/07/2005', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (786, ''', CAST(0x000096A3009E7348 AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (787, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (47, ''18'',''StartSearch( 18)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (788, 'Dates = 01/07/2005 to 31/07/2005', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (789, ''', CAST(0x000096A3009EADE0 AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (790, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (48, ''22'',''clsGeneralExtract.GetStats()'',''Product = ''''*''''', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (791, 'Suppliers = ''''*''''', 'SUPPLIERS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (792, 'Clinicians = ''''*''''', 'CLINICIANS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (793, 'Month = 0Year = 0', 'MONTH');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (794, 'Dates = 01/10/2005 to 31/12/2005', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (795, 'Pat Cat = ''''*''''', 'PAT CAT');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (796, 'Reasons = ''''*''''', 'REASONS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (797, 'Sorting on = SURNAME Order = A', 'SORTING ON');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (798, ''', CAST(0x0000974A009ECEB0 AS DateTime), ''Permission denied'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (799, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (49, ''22'',''clsGeneralExtract.GetStats()'',''Product = ''''*''''', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (800, 'Suppliers = ''''*''''', 'SUPPLIERS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (801, 'Clinicians = ''''*''''', 'CLINICIANS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (802, 'Month = 0Year = 0', 'MONTH');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (803, 'Dates = 01/05/2006 to 31/05/2006', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (804, 'Pat Cat = ''''*''''', 'PAT CAT');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (805, 'Reasons = ''''*''''', 'REASONS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (806, 'Sorting on = SURNAME Order = A', 'SORTING ON');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (807, ''', CAST(0x000097D400F13218 AS DateTime), ''Permission denied'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (808, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (50, ''23'',''StartSearch( 23)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (809, 'Dates = 01/04/2005 to 31/03/2006', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (810, ''', CAST(0x0000980900FE4624 AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (811, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (51, ''23'',''StartSearch( 23)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (812, 'Dates = 01/04/2005 to 31/03/2006', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (813, ''', CAST(0x0000980900FE649C AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (814, 'INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (52, ''17'',''StartSearch( 17)'',''Month = 0Year = 0', 'AUDITLOGBTSTATS');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (815, 'Dates = 00:00:00 to 00:00:00', 'DATES');
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (816, ''', CAST(0x0000980900FF24CC AS DateTime), ''Type mismatch'')', NULL);
INSERT INTO SQL_SERVER_AUDITLOGBTSTATS (ROW_NUMBER, DML_STRING, TABLE_NAME)
VALUES (943, 'SET IDENTITY_INSERT AuditLogBTStats OFF', 'AUDITLOGBTSTATS');
COMMIT;
W.R.T. the sample data,
Code:
SELECT ROW_NUMBER,DML_STRING
FROM SQL_SERVER_AUDITLOGBTSTATS
WHERE ROW_NUMBER BETWEEN 781 AND 784;
Code:
ROW_NUMBER DML_STRING
781 INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (45, '18','StartSearch( 18)','Month = 0Year = 0
782 Dates = 01/06/2005 to 30/06/2005
783 ', CAST(0x0000968400ADD978 AS DateTime), 'Type mismatch')
784 INSERT AuditLogBTStats (ErrorID, Query Type, Code Routine, Query Parameters, Error Date, Error Description) VALUES (46, '18','StartSearch( 18)','Month = 0Year = 0
I want to get the DML_STRING of 781
concatenated with CR/LF,
concatenated with the DML_STRING of 782
concatenated with CR/LF,
concatenated with the DML_STRING of 783.
Row 784 contains the word "INSERT" so it denotes the start of the next insert statement. It requires the above concatenation but with the content of rows 785 and 786.
Note that there are a variable number of rows involved. It just so happens that my example joins 3 rows, but this can vary, so the solution has to cater for an unknown number of rows.
Regards
T