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)
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;
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.
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;
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);
@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/