Tengo que convertir algunas funciones JS a udfs de copos de nieve. Funciona correctamente con datos de muestra codificados, pero no puedo hacer que acepte la entrada del usuario como argumentos. Sé que se supone que la declaración de creación de UDF debe tomar la entrada, pero no puedo hacer que funcione.
CREATE OR REPLACE FUNCTION findAndReplace() RETURNS variant LANGUAGE JAVASCRIPT AS $$ return execute(map,value); $$ ; select findAndReplace();Gracias por la ayuda.
Asumiendo que los argumentos a proporcionar están dentro map.set("SKU","Common Measurement (L x W)^Manufacturer Color/Finish"); la firma de la función debe cambiarse a findAndReplace(ARG1 TEXT, ARG2 TEXT) :
CREATE OR REPLACE FUNCTION findAndReplace(ARG1 TEXT, ARG2 TEXT) RETURNS variant LANGUAGE JAVASCRIPT AS $$ const execute = (productMap, values) => { const split = values.split(","); const value = productMap.get(split[0]); try { if (split.length > 2) { if (value != null) { const from = split[1].replaceAll("\'", ""); const to = split[2].replaceAll("\'", ""); return value.replaceAll(from,to); } } }catch{ console.log("Error in executing FindAndReplace Rule "); } return "n/a"; } //Example var map = new Map() map.set(ARG1, ARG2); // <-- HERE const value = "SKU,'Color/','#'"; return execute(map,value); $$ ;Funciona todo:
select findAndReplace('SKU', 'Common Measurement (L x W)^Manufacturer Color/Finish');