Escrito por

Sales Engineer at InterSystems Iberia
Artículo Ricardo Paiva · mar 23 2m read

Método de acceso SQL para propiedades que definen colecciones de listas

Preguntas frecuentes de InterSystems

Las propiedades definidas en colecciones de listas (Property XXX As list of %String;) se pueden manipular mediante las funciones SQL: $LISTBUILD() y $LISTFROMSTRING().

Para obtener más información sobre cada función SQL, consulte la página de documentación que se indica a continuación.

InterSystems SQL Reference - $LISTBUILD() [IRIS]
IRIS SQL Reference - $LISTFROMSTRING() [IRIS]
Caché SQL Reference - $LISTBUILD()
Caché SQL Reference - $LISTFROMSTRING()

/// Class definition example
Class ISJ.ListOfData Extends %Persistent
{
    Property listdata As list Of %String;
}

A continuación se muestra un ejemplo de ejecución de una sentencia SQL. 

USER>do $system.SQL.Shell()
--- Display omitted ---
USER>>insert into ISJ.ListOfData (listdata) values($LISTBUILD('A','I','U'))
10. insert into ISJ.ListOfData (listdata) values($LISTBUILD('A','I','U'))
1 Row Affected
--- Display omitted ---
↓The following is an example using $LISTFROMTOSTRING() ↓
USER >>insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('KA,KI,KU'))
12. insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('KA,KI,KU') )
1 Row Affected
statement prepare time: 0.0180s, elapsed execute time: 0.0001s.
----------------------------------- ----------------------------------------
USER>>quit
USER>set obj=# #class(ISJ.ListOfData).%OpenId(1) // Check with object
USER>write obj.listdata.Count()
3
USER>write obj.listdata.GetAt(1)
A
USER>write obj.listdata.GetAt( 2)
USER
>write obj.listdata.GetAt(3) USER>
set
obj=##class(ISJ.ListOfData).%OpenId(2)
USER>for i=1:1:obj.listdata.Count() {write obj.listdata.GetAt(i),!} write

Cuando se accede a ella en formato ODBC, se puede tratar como datos separados por comas.

*El método para cambiar el formato de visualización es el mismo que para las columnas de tipo DATE y TIME.

Para más detalles, consulte los temas relacionados.

USER>do $system.SQL.Shell()
-- Display omitted --
USER>>set selectmode = odbc // ←Switch to ODBC mode
selectmode = odbc
USER>>select * from ISJ.ListOfData
14. select * from ISJ .ListOfData
ID listdata
1 a,i,u2
ka,ki,ku2
Rows(s) Affected
statement prepare time: 0.0003s, elapsed execute time: 0.0006s.
---------------------------------------------------------------------------
USER>>update ISJ.ListOfData set listdata='Sa,shi,su' where ID=1
15. update ISJ.ListOfData set listdata='Sa,shi,su' where ID =1
1 Row Affected
statement prepare time: 0.0007s, elapsed execute time: 0.0003s.
------------------------------------------------------------------------
USER>>select * from ISJ.ListOfData
16. select * from ISJ.ListOfData
ID listdata
1 sa,shi,su2
ka,ki,
ku2 Rows(s) Affected
statement prepare time: 0.0003s, elapsed execute time: 0.0005s.
USER>>quit
------------------------------------------