Artículo
· 18 mar, 2023 Lectura de 4 min

Procedimientos Almacenados, la navaja suiza de SQL

Una de las razones por las que me encantan Cache e IRIS es que no solo puedes hacer cualquier cosa que puedas imaginar, sino que también puedes hacerlas de un montón de maneras diferentes!!

Imagina que tienes una integración con IRIS (o Cache) funcionando conectada por ODBC. Probablemente solo uses consultas SQL, pero puedes usar también procedimientos almacenados y dentro de su código puedes hacer cualquier cosa que puedas imaginar.

Voy a darte algunos ejemplos, pero el límite está en tu imaginación!

 

Quizás te estés diciendo... ¡espera!! Yo no sé como crear un procedimiento almacenado en IRIS... Pero eso no es cierto, sabes crearlo! Lo que pasa que todavía no lo sabes...

Crear un procedimiento almacenado es tan simple como añadir un tag a un ClassMethod existente:

ClassMethod testStoredProcedure(name As %String) As %String [ SqlProc ]
{
    Quit "hello "_name
}

Solo añadiendo el tag SqlProc a la definición del método, ya podrás usarlo como un procedimiento almacenado. 

 

Y para invocarlo, bastará con una llamada como esta:

Select AQS_urlShortener.Url_testStoredProcedure('Dani')

Y en el caso de que no estés interesado en la respuesta, podrías simplemente hacer la petición así:

Call AQS_urlShortener.Url_testStoredProcedure('Dani')

 

Y lo mejor de todo, es que puedes usarlo para cualquier cosa que quieras. Te doy varios ejemplos:
 

1 - Insertar un montón de datos de una forma mucho mas rápida que con queries:

Imagina que has creado un registro como este:

"customerName|address|phone¬customer2Name|address|phone¬customer3Name|address|phone...."  

Y tienes un procedimiento almacenado como este:

ClassMethod StoreCustomers(registers As %String(MAXLEN=36000)) As %String [ SqlProc ]
{
    #Dim regX, name, address, phone, i, customerId, counter

    Set counter = 0
    For i=1:1:$LENGTH(registers,"¬")
    {
        Set regX=$Piece(registers,"¬",i)
        Continue:regX=""
        Set name    = $PIECE(regX,"|",1)
        Set address = $PIECE(regX,"|",2)
        Set phone   = $PIECE(regX,"|",3)

        Set customerId = $INCREMENT(^Customers)
        Set ^Customers(customerId,"Name")   = name
        Set ^Customers(customerId,"Address")= address
        Set ^Customers(customerId,"Phone")  = phone
        Set counter = counter + 1
    }


    Quit "Stored "_counter_" customers"
}

 

Puedes almacenar clientes a una velocidad de locura.

(Presta atención a la definición del parámetro del método, he añadido (MAXLEN = X) donde X es el valor de MAXLENGTH que tengas configurado).

Después podrías hacer la petición así:

Select AQS_urlShortener.Url_StoreCustomers('Dani|C/Falsa,123|+34614258966¬Robert|Wall Street, 123|+54856325774')

Una cosa a tener en cuenta es que hay que controlar también la longitud de la llamada al procedimiento almacenado, para evitar que de MAXSTRING, en caso de que quieras grabar muchísimos registros tendrías que partir la petición en varias llamadas al procedimiento almacenado.

Sé que no es muy bonito, pero es realmente rápido y te podría salvar en más de una ocasión.
 

2 - Aprovecha un desarrollo existente:

Podrías tener un desarrollo hecho para enviar SMS a tus clientes y puede que quisieras aprovecharlo en un desarrollo externo y quieres hacerlo rápido.

Ok, lo único que tendrías que hacer es crear un procedimiento almacenado y añadir la llamada al mismo dentro del código:

ClassMethod SendSmsToCustomer(phone As %String, message As %String(MAXLEN=2000)) As %String [ SqlProc ]
{
    #Dim result

    Set result = ##class(MySmsClassSender).send(phone, message)


    Quit result
}

 

Y aquí el resultado:


 

3 - Ejecutar un montón de amados métodos de Rutinas y Clases:

ClassMethod ExecuteRoutineX(customerId As %Integer, phone As %String, address As %String, message As %String(MAXLEN=2000)) As %String [ SqlProc ]
{
    #Dim result

    Do SavePhoneCustomer^MyRoutine(customerId, phone)
    Do SaveAddressCustomer^MyRoutine(customerId, address)
    Do ##class(MySmsClassSender).send(phone, message)

    Quit "Customer Stored"
}

 

Al final, el límite está en tu imaginación!


Ah!, para ver los procedimientos almacenados que tienes creados desde el portal, puedes revisarlos yendo a:

System Explorer -> SQL 

 

¡Ahora tú también puedes usar procedimientos almacenados!!

Espero que encuentres este artículo útil. ¡Gracias por leerme!

Comentarios (0)1
Inicie sesión o regístrese para continuar