Procedura składowana z parametrem output

0

Witam,
Potrzebuję Waszej pomocy ponieważ siedzę już drugi dzień i kompletnie nic mi nie chce działać. Mam procedurę z parametrem wyjściowym:

CREATE PROCEDURE nazwa_schematu.procedura
  (IN in_ID INTEGER
  ,IN in_PARAM_1 VARCHAR(20)
  ,IN in_PARAM_2 VARCHAR(400)
  ,OUT out_PARAM_3 VARCHAR(400)
  )
  LANGUAGE SQL
 BEGIN

MERGE schemat.Tabela AS tab
USING (SELECT ID, PARAM_1, PARAM_2 FROM Tabela WHERE ID = in_ID) AS result
WHEN MATCHED THEN
... UPDATE....
WHEN NOT MATCHED THEN
..INSERT ..

I teraz potrzebuję zrobić tak aby w przypadku wykonania się w procedurze insert-a zwrócił mi jeden z parametrów nowo dodanego wiersza a jeżeli wykonał update to aby zwrócił ten parametr z update-owanego wiersza. Testowałem już miliony różnych kombinacji, żadna nie chce działać. Już mi ręcę opadają ponieważ nie ma strony której bym nie przejrzał. Za moment mi się w internecie rozwiązania skończą i dalej do tego nie dojdę. Proszę o pomoc. Samą procedurę bez parametru wyjściowego mam ogarniętą i działa.

0
lukpio3 napisał(a):

Testowałem już miliony różnych kombinacji, żadna nie chce działać. Już mi ręcę opadają ponieważ nie ma strony której bym nie przejrzał.

Kręcisz - nie przetestowałbyś milionów kombinacji w dwa dni :D

Ostatni przykład dla MS SQL (jaka baza danych?):
https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017

0

Baza danych to DB2. Zrobiłem coś takiego:

CREATE PROCEDURE nazwa_schematu.procedura
  (IN in_ID INTEGER
  ,IN in_PARAM_1 VARCHAR(20)
  ,IN in_PARAM_2 VARCHAR(400)
  ,OUT out_PARAM_3 VARCHAR(400)
  )
  LANGUAGE SQL
 BEGIN
 
MERGE schemat.Tabela AS tab
USING (SELECT ID, PARAM_1, PARAM_2 FROM Tabela WHERE ID = in_ID) AS RESULT
WHEN MATCHED THEN
... UPDATE....
WHEN NOT MATCHED THEN
..INSERT ..
commit;
SET out_PARAM_3 = (SELECT MAX(PARAM_3 ) FROM schemat.tabela);
commit;

Ale niestety nie chce nic zwracać. To znaczy polecenie się wykonuje ale podczas wywoływania procedury nic nie zwraca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1