Далеч съм от мисълта че съм добър програмист но нещо не мога да се съглася с мнението от статията .....че....
"... Който иска да контролира нещата - трябва да ползва генератори. ..."
Доста мога да поспоря по въпроса но ако става въпрос за бази които имат процедури то тогава 100% съм убеден че
>>> Който иска да контролира нещата - трябва да ползва процедури<<<
Още веднъж подчертавам това е моето мнение...
(а и не съм много сигурен че проблема който се обсъжда е точно това за което аз се сещам)
ето ви и пример...
=========================================================
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE "ADD_TO_STOR"
(
"IDNOM" INTEGER,
"NOMQNT" NUMERIC(15, 6),
"NOMPRICE1" NUMERIC(15, 6),
"NOMPRICE2" NUMERIC(15, 6),
"NOMPRICE3" NUMERIC(15, 6),
"RDESC" VARCHAR(64)
)
RETURNS
(
"RESCODE" INTEGER
)
AS
DECLARE VARIABLE IDNO INTEGER;
DECLARE VARIABLE IDUNQ INTEGER;
BEGIN
/*initialization*/
RESCODE = 0;
IDNO = -1;
IDUNQ = -1;
/*check for empty string*/
IF (RDESC <> 'from ADD_TO_NOM') THEN
BEGIN
IF ( (NOMPRICE1 IS NULL OR (NOMPRICE1=0)) AND
(NOMPRICE2 IS NULL OR (NOMPRICE2=0)) AND
(NOMPRICE3 IS NULL OR (NOMPRICE3=0)) ) THEN
BEGIN
RESCODE = -4;
SUSPEND;
END
END
ELSE
BEGIN
RDESC = '';
END
/*set nulls*/
IF ( NOMPRICE1 IS NULL ) THEN
BEGIN
NOMPRICE1 = 0;
END
IF ( NOMPRICE2 IS NULL ) THEN
BEGIN
NOMPRICE2 = 0;
END
IF ( NOMPRICE3 IS NULL ) THEN
BEGIN
NOMPRICE3 = 0;
END
/*check and increment primary key*/
SELECT MAX(IDSTOR)+1 FROM STOR INTO :IDNO;
IF (IDNO IS NULL OR (IDNO = 0) ) THEN
BEGIN
IDNO = 1;
END
IF (IDNO = -1) THEN
BEGIN
RESCODE = -3;
SUSPEND;
END
/*adding a record*/
INSERT INTO STOR (IDSTOR, IDNOM, NOMQNT1, NOMQNT2, NOMQNT3, NOMPRICE1, NOMPRICE2, NOMPRICE3, NOMPROFIT, RDESC)
VALUES (:IDNO,:IDNOM, :NOMQNT, 0, 0, :NOMPRICE1, :NOMPRICE2, :NOMPRICE3, 0, :RDESC);
/*SQL standard errors*/
WHEN SQLCODE -803 DO
BEGIN
RESCODE = -2;
SUSPEND;
END
/*any other error*/
WHEN ANY DO
BEGIN
RESCODE = -1;
SUSPEND;
END
END
^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
=========================================================
|