1. CREATE OR ALTER PROCEDURE GEN_SPIS
  2. returns (
  3. nazwa varchar(40) collate pxw_plk,
  4. waga numeric(15,2),
  5. ilosc integer,
  6. cena numeric(15,2),
  7. cg numeric(15,2),
  8. cs numeric(15,2),
  9. jm varchar(10) collate pxw_plk,
  10. zakup numeric(15,2),
  11. mg integer,
  12. produkt integer)
  13. AS
  14. declare variable grupa integer;
  15. declare variable met integer;
  16. declare variable sz integer;
  17. begin
  18. CREATE VIEW stanm AS SELECT * FROM spis_poz ;
  19. FOR SELECT m.ilosc , m.waga, m.cena, m.cg,m.cs, g.id_grupy, pp.id_produkty_metal, kr.szlachetny, m.id_produktu FROM sklepy_stan_m m
  20. LEFT JOIN produkty pp ON m.id_produktu=pp.id
  21. LEFT JOIN gruptow_type g ON pp.id_produkty_gruptow_type=g.id
  22. LEFT JOIN produkty_kamien_rodzaj kr ON pp.id_produkty_kamien_rodzaj=kr.id
  23. WHERE m.miesiac=12 AND m.rok=2015 AND m.id_produktu<>6487 AND m.id_produktu<>6484 AND m.id_produktu<>6485 AND m.ilosc<>0 ORDER BY m.ilosc
  24. INTO :ilosc, :waga,:cena,:cg, :cs, :grupa, :met, :sz ,:produkt
  25. do
  26. begin
  27. zakup = 0;
  28. nazwa = '';
  29. jm = '';
  30. mg = 1;
  31. IF (grupa = 2) then mg = 1;
  32. IF (sz = 1 AND (grupa = 3 OR grupa = 4)) then mg = 6;
  33. IF (sz = 0 AND (grupa = 3 OR grupa = 4)) then mg = 5;
  34. IF (grupa = 0 AND met = 14) then mg =2;
  35. IF (grupa = 0 AND met = 7) then mg = 4;
  36. IF (grupa = 0 AND met = 9) then mg = 10;
  37. IF (grupa = 0 AND met = 12) then mg = 3;
  38.  
  39. SELECT first 1 p.cena, p.jm, p.nazwa FROM stanm p WHERE p.jm='g' AND p.cena>=:cg*0.95 AND p.cena<=:cg*1.05 AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  40. IF (zakup = 0) then
  41. begin
  42. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='g' AND p.cena>=:cg*0.9 AND p.cena<=:cg*1.1 AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  43. end
  44. IF (zakup = 0) then
  45. begin
  46. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='szt' AND p.cena>=:cs*0.9 AND p.cena<=:cs*1.1 AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  47. end
  48. IF (zakup = 0) then
  49. begin
  50. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='g' AND p.cena>=:cg*0.8 AND p.cena<=:cg*1.2 AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  51. end
  52. IF (zakup = 0) then
  53. begin
  54. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='szt' AND p.cena<:cs AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  55. end
  56. IF (zakup = 0) then
  57. begin
  58. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='g' AND p.cena<:cg AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc DESC INTO:zakup, :jm, :nazwa;
  59. end
  60. IF (zakup = 0) then
  61. begin
  62. SELECT first 1 p.cena , p.jm, p.nazwa FROM stanm p WHERE p.jm='szt' AND p.cena>:cs AND p.cena<:cena AND p.grupa=:mg AND p.ilosc > 0 ORDER BY p.ilosc INTO:zakup, :jm, :nazwa;
  63. end
  64. suspend;
  65. end
  66. end


dostaje błąd , czyżby firebird 2.5 nie obsługiwał w procedurach wirtualnych tabel ?

  1. Dynamic SQL Error.
  2. SQL error code = -104.
  3. Token unknown - line 18, COLUMN 1.
  4. CREATE.