2009-11-12 4 views
0

У меня есть proc, который печатает, проверяет, есть ли новые проверки для печати. Если нечего выпускать новые чеки, это не печатает. Теперь я хочу изменить этот процесс, даже если у меня нет новых проверок для печати, он должен выбрать хотя бы одну проверку для печати (даже если она уже напечатана). Можете ли вы рассказать мне, как это сделать. Здесь хранится proc.Изменение хранимой процедуры

CREATE PROCEDURE [proc_1250_SELCashiersChecksForPrint] AS 

SELECT t_DATA_CashiersChecksIssued.ControlNbr, 
    t_DATA_CashiersChecksIssued.Audit_DateAdded, 
    t_DATA_CashiersChecksIssued.BatchNbr, 
    t_DATA_CashiersChecksIssued.SerialNbr, 
    t_DATA_CashiersChecksIssued.CheckRTN, 
    t_DATA_CashiersChecksIssued.CheckAccountNbr, 
    t_DATA_CashiersChecksIssued.Amount, 
    t_DATA_CashiersChecksIssued.DateIssued, 
    t_DATA_CashiersChecksIssued.Payee, 
    t_DATA_CashiersChecksIssued.Address, 
    t_DATA_CashiersChecksIssued.City, 
    t_DATA_CashiersChecksIssued.State, 
    t_DATA_CashiersChecksIssued.Zip, 
    t_DATA_Reclamation.ClaimId, 
    t_DATA_Reclamation.NoticeDate, 
    t_DATA_Reclamation.FirstName, 
    t_DATA_Reclamation.MiddleName, 
    t_DATA_Reclamation.LastName, 
    t_DATA_Reclamation.ClaimTotal, 
    t_PCD_Claimant.Name AS Agency, 
    t_DATA_CashiersChecksIssued.IDENTITYCOL 
FROM t_DATA_CashiersChecksIssued INNER JOIN 
    t_DATA_Reclamation ON 
    t_DATA_CashiersChecksIssued.ControlNbr = t_DATA_Reclamation.ControlNbr 
    INNER JOIN 
    t_PCD_Claimant ON 
    t_DATA_Reclamation.ClaimantCode = t_PCD_Claimant.ClaimantCode 
WHERE (t_DATA_CashiersChecksIssued.SerialNbr IS NULL) AND 
    (t_DATA_CashiersChecksIssued.DateIssued IS NULL) 
ORDER BY t_DATA_CashiersChecksIssued.Audit_DateAdded ASC, 
     t_DATA_CashiersChecksIssued.ControlNbr ASC 

Сообщите мне, если вам нужна дополнительная информация.

+2

Почему вы хотите, чтобы напечатать чек, если он уже был напечатан? По моему опыту, ничто не подрывает доверие пользователя к ИТ-системе, чем делает что-то необъяснимое. – APC

ответ

1

Выбор TOP 1 t_DATA_CashiersChecksIssued.ControlNbr, t_DATA_CashiersChecksIssued.Audit_DateAdded, t_DATA_CashiersChecksIssued.BatchNbr, t_DATA_CashiersChecksIssued.SerialNbr, t_DATA_CashiersChecksIssued.CheckRTN, t_DATA_CashiersChecksIssued.CheckAccountNbr, t_DATA_CashiersChecksIssued.Amount, t_DATA_CashiersChecksIssued.DateIssued, t_DATA_CashiersChecksIssued.Payee , t_DATA_CashiersChecksIssued.Address, t_DATA_CashiersChecksIssued.City, t_DATA_CashiersChecksIssued.State, t_DATA_CashiersChecksIssued.Zip, t_ DATA_Reclamation.ClaimId, t_DATA_Reclamation.NoticeDate, t_DATA_Reclamation.FirstName, t_DATA_Reclamation.MiddleName, t_DATA_Reclamation.LastName, t_DATA_Reclamation.ClaimTotal, t_PCD_Claimant.Name А.С. агентство, t_DATA_CashiersChecksIssued.IDENTITYCOL ОТ t_DATA_CashiersChecksIssued INNER JOIN t_DATA_Reclamation ПО t_DATA_CashiersChecksIssued.ControlNbr = t_DATA_Reclamation .ControlNbr INNER JOIN t_PCD_Claimant ON t_DATA_Reclamation.ClaimantCode = t_PCD_Claimant.ClaimantCode ORDER BY DESC t_DATA_CashiersChecksIssued.Audit_DateAdded

0

Используйте TOP п SQL синтаксис:

if EXISTS (/* Look for an unprinted check - "date_issued is null" */) 
    /* print unprinted checks */ 
ELSE 
    select top 1 /* already-printed-checks */ 
    where .... "date_issued is not null" 

ИЛИ

Вы хотите напечатать "аннулированный/Отменено" проверить - когда вы сделаете это?

+0

вместо изменения кода vb мы можем изменить хранимую процедуру? – pbrp

+2

«top 1» не существует в Oracle – Dan

0

Вам нужно решить, как вы хотите выбрать свой «по крайней мере один».

Простейший способ (возможно) состоит в том, чтобы удалить любое условие в условии WHERE, исключая уже распечатанные проверки. Предположим, что это t_DATA_CashiersChecksIssued.DateIssued IS NULL. Теперь добавьте столбец в ваше предложение SELECT следующим образом: CASE WHEN t_DATA_CashiersChecksIssued.DateIssued IS NULL then 0 ELSE 1 END и сделайте этот столбец первым в предложении ORDER BY.

Теперь в процедуре выберите только одну строку из этого курсора. Если этот новый столбец имеет значение 0, есть хотя бы одна новая проверка, которую нужно обработать, и вы должны перебирать курсор, но останавливайтесь, когда дойдете до уже выпущенного. Если оно имеет значение 1, новых проверок нет.

Редактировать: Другим подходом было бы сделать это прямо в вашем SQL. Оставьте исходный файл как есть, но добавьте предложение вроде: UNION ALL SELECT ... AND ROWNUM = 1 где ... представляет ваш существующий запрос, но с условием исключения уже отпечатанных проверок. С другой стороны, это может быть проще.