Transaction Notification en HANA

Hola, buena tarde,

Pues les cuento que estoy trabajando con HANA, en SQL no tengo ningún problema para crear validaciones en el TN pero ahora en HANA he estado batallando un poco.

Tengo el siguiente código, es bien sencillo, valida que los SN tengan un valor en calle, es el primero de unos cuantos que tengo que crear, creo que al entender el código de una vaidacion las restantes no tendré problemas.

if object_type = '2' and  transaction_type in ('A','U')
   then 
      if (Select top 1 "Street" from CRD1 where "CardCode" = list_of_cols_val_tab_del)= ' ' -- aqui orignialmente tenía is null pero me marco error intenté con ifnull pero igual, error.
      then
      error = 001;
      error_message := N'Error- El campo Calle/ Número es obligatorio';
   end if;
end if;

En la cabecera o al inicio del SP

DROP PROCEDURE "TEST".SBO_SP_TransactionNotification; para eliminar el TN porque entiendo que no hay manera de hacer un ALTER

CREATE PROCEDURE "TEST".SBO_SP_TransactionNotification para crearlo y que incluya el nuevo código, pero al ejecutarlo me aparece un error que dice así

Statement 'DROP PROCEDURE "TEST".SBO_SP_TransactionNotification' 
successfully executed in 4 ms 169 µs  (server processing time: 3 ms 528 µs) - Rows Affected: 0 
Could not execute 'CREATE PROCEDURE "TEST".SBO_SP_TransactionNotification ( in object_type nvarchar(30), -- ...'
SAP DBTech JDBC: [7]: feature not supported: IN comparison is not supported in SQLScript.: line 44 col 27 (at pos 1381)

Agradeceré mucho su ayuda.

Saludos.

Hola @pcarrasco, puede ser algun error de sintaxis de tu create, fijate este ejemplo:

CREATE PROCEDURE SBO_SP_TransactionNotification ( in object_type nvarchar(20),

— SBO Object Type

in transaction_type nchar(1),

— [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose

in num_of_cols_in_key int,

in list_of_key_cols_tab_del nvarchar(255),

in list_of_cols_val_tab_del nvarchar(255) ) LANGUAGE SQLSCRIPT AS — Return values

error int;                    — Result (0 for no error)

error_message nvarchar (200); — Error string to be displayed

 

begin error := 0;

error_message := N‘Ok’;

———————————————————————-

—    ADD   YOUR  CODE  HERE

 

———————————————————————- — Select the return values

select

       :error,

       :error_message

FROM dummy;

 

end;

Saludos,

1 me gusta

gracias @Willy_Caldero así como el ejemplo es mi transaction sin ninguna validación, el problema resulta cuando pongo algo de código, entonces doy por hecho que estoy haciendo algo mal.

Hola @pcarrasco, debes poder hacer un ALTER siempre que no agregues o elimines un parametro al Stored.
O tambien puedes intentar eliminar el stored haciendo clic derecho sobre el Stored y despues clic en Delete
Espero te sea de ayuda.

Saludos.

Hola @pcarrasco
En HANA no funciona el esquema tradicional de SQLSERVER, debes guardar el resultado de la consulta en una variable temporal,

IF object_type = '2' AND  transaction_type IN ('A','U') THEN
	SELECT COUNT("CardCode") INTO cnt FROM CRD1 
	WHERE "Street" IS NULL AND "CardCode" = list_of_cols_val_tab_del
	IF :cnt>0 THEN
				error := 001;
				error_message := 'Error- El campo Calle/ Número es obligatorio';
	END IF;
END IF;

Saludos,
Andres Ramirez Jaramillo :colombia:

1 me gusta

Gracias @andresramirez veo que la variable la asignas con INTO y la guardas en cnt, esta variable la tengo que declarar, cierto ? de ser así me doy cuenta que no tengo que poner

declare @variable nvarchar (200)
si no
cnt nvarchar (200);

Estoy en lo correcto ??

Saludos.

@pcarrasco el declare es reservado para SQLSERVER, debe ser asi cnt int;
Revisa lo siguiente
h_tps://blogs.sap.com/2013/10/15/implementing-sbosptransactionnotification-of-sap-business-one-version-for-sap-hana/

1 me gusta

@andresramirez agradezco mucho tu ayuda.

Saludos

1 me gusta