Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Seistech SQL code
1. -- =============================================
-- Author: Simon Hoyle
-- Create date: 23/4/2002
-- Description: Part 3 of personnel search procedure
-- =============================================
ALTER PROCEDURE [dbo].[usp_FindP_ShowPersonnel]
@lastname as nvarchar(30),
@Discipline as nvarchar(50),
@Discipline2 as nvarchar(50),
@Discipline3 as nvarchar(50),
@Discipline4 as nvarchar(50),
@PrimaryRank as nvarchar(50),
@Country as nvarchar(30),
@OnshoreExperience bit,
@OffshoreExperience bit,
@HasContract as nvarchar(10),
@PersonalDetails nvarchar(100),
@PersonalDetails2 nvarchar(100),
@Notes nvarchar(100),
@ClientEnqNotes nvarchar(100),
@ValidCertsOnly as smallint,
@UserTag bit,
@AvailableFrom as nvarchar(10),
@DateAvailExcludeBlank bit,
@DateAvailMonthLimit bit
AS
DECLARE @sqlstatement as nvarchar(2000),
@TempFileIndex as nvarchar(1),
@where as nvarchar(1000),
@tempviewname as nvarchar(30),
@StatusCompareType nvarchar(2),
@LoopDone as int,
@Include as smallint,
@Status as nvarchar(20),
@YesMatch as nvarchar(500),
@NoMatch as nvarchar(500),
@MatchString as nvarchar(600),
@DateAvailFrom as datetime, @DateAvailTo as datetime
--
-- Clear temp tables
DELETE FROM USYS_FindPersonnel_Results1 WHERE
TerminalID=HOST_ID()
DELETE FROM USYS_FindPersonnel_Results2 WHERE
TerminalID=HOST_ID()
DELETE FROM USYS_FindPersonnel_Results3 WHERE
TerminalID=HOST_ID()
--
2. -- Standard search, into USYS_FindPersonnel_Results1
EXEC usp_FindP_StdSearch @lastname, @Discipline,
@Discipline2, @Discipline3, @Discipline4, @PrimaryRank,
@Country, @OnshoreExperience, @OffshoreExperience
SET @TempFileIndex = 1
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- User tag search ?
IF (@UserTag<>0)
BEGIN
-- If a tagged search, USYS_FindPersonnel
will have been loaded with PersonnelID's of tagged records
-- by frmFindPersonnel/ShowPersonnel.
-- Copy standard search result matched with
tagged to USYS_FindPersonnel_Results2
INSERT INTO USYS_FindPersonnel_Results2
(PersonnelID)
SELECT
USYS_FindPersonnel_Results1.PersonnelID FROM
USYS_FindPersonnel_Results1
INNER JOIN USYS_FindPersonnel ON
USYS_FindPersonnel_Results1.PersonnelID =
USYS_FindPersonnel.PersonnelID
WHERE USYS_FindPersonnel.TerminalID =
host_id()
-- Clear USYS_FindPersonnel_Results1
DELETE FROM USYS_FindPersonnel_Results1 WHERE
TerminalID=HOST_ID()
-- Copy back from
USYS_FindPersonnel_Results2 to USYS_FindPersonnel_Results1
INSERT INTO USYS_FindPersonnel_Results1
(PersonnelID)
SELECT PersonnelID FROM
USYS_FindPersonnel_Results2
WHERE USYS_FindPersonnel_Results2.TerminalID
= host_id()
-- Clear USYS_FindPersonnel_Results2
DELETE FROM USYS_FindPersonnel_Results2 WHERE
TerminalID=HOST_ID()
END
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- AvailableDate?
3. IF (Len(@AvailableFrom)> 0)
-- YES,
BEGIN
IF (ISDATE(@AvailableFrom) = 1)
BEGIN
SET @DateAvailFrom =
Cast(@AvailableFrom as datetime)
--
IF (@DateAvailMonthLimit = 1)
SET @DateAvailTo = DATEADD(m, 1,
@DateAvailFrom)
ELSE
SET @DateAvailTo = DATEADD(m, 12,
@DateAvailFrom)
--
IF (@DateAvailExcludeBlank = 0)
INSERT INTO
USYS_FindPersonnel_Results2 (PersonnelID)
SELECT
USYS_FindPersonnel_Results1.PersonnelID FROM
USYS_FindPersonnel_Results1
INNER JOIN tblPersonnel ON
USYS_FindPersonnel_Results1.PersonnelID =
tblPersonnel.PersonnelID
WHERE
USYS_FindPersonnel_Results1.TerminalID = host_id()
AND (
(tblPersonnel.AvailableFrom BETWEEN @DateAvailFrom AND
@DateAvailTo)
OR
(tblPersonnel.AvailableFrom IS NULL)
)
ELSE
INSERT INTO
USYS_FindPersonnel_Results2 (PersonnelID)
SELECT
USYS_FindPersonnel_Results1.PersonnelID FROM
USYS_FindPersonnel_Results1
INNER JOIN tblPersonnel ON
USYS_FindPersonnel_Results1.PersonnelID =
tblPersonnel.PersonnelID
WHERE
USYS_FindPersonnel_Results1.TerminalID = host_id()
AND
(tblPersonnel.AvailableFrom BETWEEN @DateAvailFrom AND
4. @DateAvailTo)
/*INSERT INTO
USYS_FindPersonnel_Results2 (PersonnelID)
SELECT
USYS_FindPersonnel_Results1.PersonnelID FROM
USYS_FindPersonnel_Results1
INNER JOIN tblPersonnel ON
USYS_FindPersonnel_Results1.PersonnelID =
tblPersonnel.PersonnelID
WHERE
USYS_FindPersonnel_Results1.TerminalID = host_id()
AND (
(tblPersonnel.AvailableFrom <= Cast(@AvailableFrom as
datetime))
OR
(tblPersonnel.AvailableFrom IS NULL)
)*/
-- Clear USYS_FindPersonnel_Results1
DELETE FROM USYS_FindPersonnel_Results1
WHERE TerminalID=HOST_ID()
-- Copy back from
USYS_FindPersonnel_Results2 to USYS_FindPersonnel_Results1
INSERT INTO USYS_FindPersonnel_Results1
(PersonnelID)
SELECT PersonnelID FROM
USYS_FindPersonnel_Results2
WHERE
USYS_FindPersonnel_Results2.TerminalID = host_id()
-- Clear USYS_FindPersonnel_Results2
DELETE FROM USYS_FindPersonnel_Results2
WHERE TerminalID=HOST_ID()
END
END
--
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- HasContract?
IF (Len(@HasContract)> 0)
-- YES,
BEGIN
IF (ISDATE(@HasContract) = 1)
BEGIN
5. INSERT INTO USYS_FindPersonnel_Results2
(PersonnelID)
SELECT UFPR.PersonnelID
FROM USYS_FindPersonnel_Results1 AS
UFPR INNER JOIN
tblContract AS C ON UFPR.PersonnelID =
C.SubcontractorID
WHERE (UFPR.TerminalID = HOST_ID()) AND
(C.StartDate >= CAST(@HasContract
AS datetime))
-- Clear USYS_FindPersonnel_Results1
DELETE FROM USYS_FindPersonnel_Results1
WHERE TerminalID=HOST_ID()
-- Copy back from
USYS_FindPersonnel_Results2 to USYS_FindPersonnel_Results1
INSERT INTO USYS_FindPersonnel_Results1
(PersonnelID)
SELECT PersonnelID FROM
USYS_FindPersonnel_Results2
WHERE
USYS_FindPersonnel_Results2.TerminalID = host_id()
-- Clear USYS_FindPersonnel_Results2
DELETE FROM USYS_FindPersonnel_Results2
WHERE TerminalID=HOST_ID()
END
END
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- Text search in tblPersonnnel ?
IF ((Len(@PersonalDetails)>1) OR
(Len(@PersonalDetails2)>1) OR (Len(@Notes)>1))
BEGIN
EXEC usp_FindP_TextSearch @PersonalDetails,
@PersonalDetails2, @Notes
END
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- Text search in tblClientEnqPersNotes?
IF (Len(@ClientEnqNotes)>1)
BEGIN
EXEC usp_FindP_TextSearch_CEPN
@ClientEnqNotes
END
6. --
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- Are there any Certification requirements?
IF EXISTS (SELECT TerminalID FROM USYS_CertSelect
WHERE (TerminalID = HOST_ID()) AND (USYS_CertSelect.Include
<> 0))
-- YES, use USYS_CertSelect to filter into
USYS_FindPersonnel_Results2
BEGIN
IF (@ValidCertsOnly<>0)
SET @tempviewname =
'viewFindPers_CertValidUnique'
ELSE
SET @tempviewname =
'viewFindPers_CertsUnique'
--
EXEC usp_FindP_MakeCertsWhere @tempviewname,
@TempFileIndex, @where OUTPUT
SET @sqlstatement = 'INSERT INTO
USYS_FindPersonnel_Results' + Cast((@TempFileIndex + 1) as
varchar) + ' (PersonnelID) SELECT ' + @tempviewname +
'.PersonnelID FROM USYS_FindPersonnel_Results' +
Cast(@TempFileIndex as varchar) + ' LEFT OUTER JOIN ' +
@tempviewname + ' ON USYS_FindPersonnel_Results' +
Cast(@TempFileIndex as varchar)+ '.PersonnelID = ' +
@tempviewname + '.PersonnelID WHERE ' + @where
EXEC sp_executesql @sqlstatement
--INSERT USYS_MSG VALUES (Cast(@sqlstatement
as nvarchar(1000)))
--INSERT USYS_MSG VALUES (Cast( 'Called
sp_executesql (Certs)- Error status=' + Cast(@@Error as
char) as nvarchar(1000)))
SET @TempFileIndex = @TempFileIndex + 1
END
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
--
-- Are there any Status requirements?
IF EXISTS (SELECT TerminalID FROM USYS_StatusSelect
WHERE (TerminalID = HOST_ID()) AND (Include <> 0))
-- YES, use USYS_StatusSelect to filter
USYS_FindPersonnel_Results2 to USYS_FindPersonnel_Results3
BEGIN
-- Create temp tables for include and exclude
7. enties
SELECT Status INTO #includestatus
FROM dbo.USYS_StatusSelect
WHERE (Include > 0) AND (TerminalID = HOST_ID())
--
SELECT Status INTO #excludestatus
FROM dbo.USYS_StatusSelect
WHERE (Include < 0) AND (TerminalID = HOST_ID())
--
-- Build action query
SET @sqlstatement = ''
--
IF Exists (SELECT * FROM #includestatus)
SET @sqlstatement = '(P.Status IN (SELECT Status
FROM #includestatus))'
--
IF Exists (SELECT * FROM #excludestatus)
BEGIN
IF (Len(@sqlstatement) > 0) SET
@sqlstatement = @sqlstatement + ' AND '
--
SET @sqlstatement = @sqlstatement +
'(P.Status NOT IN (SELECT Status FROM #excludestatus))'
END
--
SET @sqlstatement = 'INSERT INTO
USYS_FindPersonnel_Results' + Cast((@TempFileIndex + 1) as
varchar) +
' (PersonnelID) SELECT P.PersonnelID FROM
dbo.tblPersonnel AS P ' +
'RIGHT OUTER JOIN
dbo.USYS_FindPersonnel_Results' + Cast(@TempFileIndex as
varchar) + ' AS U ' +
'ON P.PersonnelID = U.PersonnelID ' +
'WHERE ((U.TerminalID = HOST_ID()) AND ' +
@sqlstatement + ')'
--
--INSERT USYS_MSG VALUES (@sqlstatement)
--
EXEC sp_executesql @sqlstatement
SET @TempFileIndex = @TempFileIndex + 1
END
--
-- Ensure result in dbo.USYS_FindPersonnel_Results5
IF (@TempFileIndex < 3)
BEGIN
8. -- Move result
SET @sqlstatement = 'INSERT INTO
USYS_FindPersonnel_Results3 (PersonnelID) SELECT
PersonnelID FROM dbo.USYS_FindPersonnel_Results' +
Cast(@TempFileIndex as varchar) + ' WHERE TerminalID =
HOST_ID()'
EXEC sp_executesql @sqlstatement
--select @sqlstatement
END
--
-- Return recordset size
SELECT COUNT(PersonnelID) AS CountOfRecordset FROM
USYS_FindPersonnel_Results3 WHERE TerminalID = HOST_ID()