Rechercher

Article
· Fév 13 3m de lecture

Un vistazo a SQL Dinámico y SQL Embebido

   

 

 

A diferencia de la película mencionada en la imagen (para quienes no lo sepan, Matrix, 1999), la elección entre SQL Dinámico y SQL Embebido no es una elección entre la verdad y la fantasía, pero sigue siendo una decisión que debéis tomar. A continuación, intentaré hacer que vuestra elección sea más sencilla.

Si vuestra necesidad es la interacción entre el cliente y la aplicación (y, por lo tanto, la base de datos), SQL Dinámico puede ser más adecuado, ya que se "adapta" fácilmente a los cambios en las consultas. Sin embargo, este dinamismo tiene un costo: con cada nueva consulta, se remodela, lo que puede hacer que su ejecución sea más costosa. A continuación, se muestra un ejemplo sencillo de un fragmento de código en Python.

Ejemplo de SQL Dinámico

Basándoos únicamente en la información anterior, ¿es SQL Embebido la mejor opción?

Depende. Si pensamos únicamente en la agilidad de ejecución, podríamos inclinarnos por esta opción, ya que las instrucciones SQL se insertan directamente en el código de programación, utilizando variables HOST para la entrada y salida de datos. Sin embargo, el objetivo aquí no es enseñaros a usar una opción u otra, sino abrir vuestra mente a las posibilidades, aprendiendo un poco sobre cada una.

A continuación, os mostramos algunas características relevantes que debéis considerar al iniciar un desarrollo que requiera consultas SQL:

Como ya mencionamos, SQL Embebido suele destacarse por su rendimiento, pero esto no es una carrera y la velocidad no lo es todo. Su integración con varios lenguajes de alto nivel permite a los desarrolladores aprovechar mejor los recursos, ya que no es necesario buscar tantos archivos externos o scripts separados, haciendo que el código sea más limpio y mantenible.

También destaca por su consistencia, ya que los cambios en la base de datos pueden reflejarse en el código SQL, evitando posibles inconsistencias en los datos. Y, por último, pero no menos importante, el hecho de que las consultas estén dentro del código lo hace más seguro, ya que los controles de acceso pueden implementarse directamente en la aplicación, evitando accesos no autorizados y consultas inapropiadas.

Ahora bien, veamos qué ventajas tiene SQL Dinámico. Su dinamismo se aprecia fácilmente en su flexibilidad, ya que todo se ajusta en tiempo de ejecución: consultas, condiciones e incluso nombres de tablas o campos, lo que beneficia tanto al cliente como al usuario. También se caracteriza por su facilidad de administración, permitiendo a los DBAs realizar mantenimientos en las bases de datos y verificar el impacto en tiempo real, evitando así problemas mayores de compilación.

En resumen, con toda esta información, más teórica que práctica, no hay un lado correcto o incorrecto, ni un villano ni un héroe. La clave está en conocer a fondo el desarrollo que se va a realizar y analizar las necesidades en detalle para tomar la mejor decisión.

¿De qué lado de la fuerza estaréis? 

 
 
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Fév 13

Concours d'articles techniques en anglais 2025

Bonjour la communauté,

Nous avons des nouvelles passionnantes ! Il est temps de participer au prochain concours d'écriture InterSystems :

✍️ Concours d'articles techniques en anglais 2025 ✍️

Rédigez un article sur n'importe quel sujet lié aux produits et services InterSystems.

🎁 Des prix pour tous : Un prix spécial pour chaque auteur participant au concours !

Prix

1. Tout le monde est gagnant au concours d'articles techniques d'InterSystems ! Tous les utilisateurs qui rédigent un article pendant la période du concours recevront un prix spécial :

🎁 Câble de chargement 4 en 1

2. Prix des experts - les articles seront jugés par des experts d'InterSystems :

🥇 1ère place : Nintendo Switch OLED / Hogwarts Icons - Édition Collecteur Lego / The X-Mansion Lego

🥈 2ème place : Nintendo Switch Lite / Lamborghini Countach 5000 Quattrovalvole Lego

🥉 3ème place : Amazon Kindle Paperwhite / Retro Radio Lego

Alternativement, chaque gagnant peut choisir un prix d'un niveau inférieur au sien.

3. Prix de la communauté des développeurs - article ayant reçu le plus de likes :

🏅  Amazon Kindle Paperwhite / Retro Radio Lego

Remarque : 

  1. L'auteur ne peut être récompensé qu'une seule fois par catégorie (au total, l'auteur gagnera 2 prix : un pour les experts et un pour la communauté).
  2. En cas d'égalité, le nombre de votes des experts pour les articles à égalité sera considéré comme un critère pour les départager.  

Qui peut participer ?

Tout membre de la communauté des développeurs, à l'exception des employés d'InterSystems. Créez un compte !

Période du concours

📝  Du 3 février au 2 mars : Publication des articles.

🗳️  Du 3 mars au 9 mars : Période de vote.

🏅  10 mars : Annonce des gagnants.

Publiez un ou plusieurs articles pendant cette période. Les membres de la CD peuvent voter pour les articles publiés grâce aux likes dans le cadre du prix de la communauté.

Remarque : Plus tôt vous publiez vos articles, plus vous avez de temps pour recueillir les votes des experts et de la communauté.

Quelles sont les conditions ? 

❗️ Tout article rédigé pendant la période du concours et répondant aux conditions ci-dessous sera automatiquement inscrit au concours :

  • L'article doit porter sur les produits et services InterSystems.
  • L'article doit être en anglais et publier sur la Communauté Anglaise.  
  • L'article doit être 100 % nouveau.  
  • L'article ne peut pas être une traduction d'un article déjà publié dans d'autres communautés.  
  • Taille d'article : 400 mots minimum (les liens et le code ne sont pas comptabilisés dans la limite de mots).  
  • Un même auteur peut soumettre plusieurs articles. 
  • Les articles sur le même sujet mais avec des exemples différents provenant d'auteurs différents sont autorisés.

* Nos experts modéreront les articles. Seuls les contenus valides seront éligibles pour participer au concours.

🎯 BONUS SUPPLÉMENTAIRES

Bonus Nominal  Détails
Bonus du sujet 3 Rédigez un article sur l'un des sujets proposés ci-dessous.
Bonus de la vidéo En plus de publier l'article, réalisez une vidéo explicative.
Bonus de la discussion 1 Article avec la discussion la plus utile, selon les experts d'InterSystems. Seul 1 article recevra ce bonus.
Bonus de la traduction 2 Publiez une traduction de votre article sur l'une des communautés régionales. Remarque : 1 seul vote par article.
Bonus pour les nouveaux participants 5 Si vous n'avez jamais participé aux concours précédents, votre ou vos articles recevront ce bonus.
Bonus pour l'application 5 Téléchargez une application de votre article sur Open Exchange.

Si un article de concours est divisé en plusieurs parties, les bonus s'appliquent uniquement à la première partie, sauf s'ils sont spécifiques à une partie ultérieure, et le même bonus ne peut pas être utilisé pour plusieurs parties.

Sujets proposés

Voici une liste de sujets proposés qui donneront à votre article un bonus supplémentaire pour le sujet :

✔️  Utilisation d'ODBC et JDBC
✔️  Utilisation de DB-API
✔️  Utilisation de Dynamic SQL dynamique et de Embedded SQL
✔️  Génération de la documentation OpenAPI
✔️  Points de terminaison liés à l'authentification (à l'aide de SSO, OAuth et ZAuth)
✔️  Utilisation d'isc.rest pour développer l'API
✔️  Embedded Python dans l'interopérabilité (opérations, services, fonctions personnalisées)
✔️  Déploiements courants IKO
✔️  Adaptation du code C#, Java et Python existant à l'interopérabilité IRIS et IRIS à l'aide de passerelles de langage externes
✔️  GenAI, Vector Search, RAG
✔️  FHIR, EHR
✔️  Data Fabric, Data Lake, Data Entrepôt, maillage de données
✔️  Partage, mise en miroir

Besoin d'inspiration ou d'un exemple ? Découvrez les #Bonnes pratiques.

Il est temps de montrer vos talents d'écrivain !

🖋️ Écrivez. Partagez. Brillez.


Remarque importante : la livraison et les prix varient selon les pays et peuvent ne pas être possibles pour certains d'entre eux. Une liste des pays soumis à des restrictions peut être demandée à @Liubka.Zelenskai

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Fév 12 2m de lecture

第二十二章 P - R 开头的术语

第二十二章 P - R 开头的术语

程序员模式 (programmer mode)

系统

所有程序开发活动进行的模式。在程序员模式下,你从 IRIS 提示符启动程序,并且每个运行的程序结束后提示符会重新出现。程序员模式涵盖了 IRIS 环境及其所有可调用的程序,包括 SQL 开发环境。在程序员模式下,你可以创建用户随后在应用程序模式下运行的应用程序。

项目 (project)

系统

用户定义的相关源文档(如例程或类定义)列表。Visual Studio Code 使用项目来帮助组织应用程序开发。

属性 (property)

对象(Objects)

表示与类相关联的特定特性的一个数据元素。该类的每个对象包含属性的字面值或指向表示数据的另一个对象的引用。一个类的所有属性共同表示其状态。

属性排序 (property collation)

对象(Objects)

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· Fév 12

SQL SYS.Database table not found

Hi,

I running an SQL so I can find the databases with the largest amount of free space. This is in case I can compact the databases.

However SQL cannot find the SYS.Database table.

Can someone please explain how to fix?

[SQL]TEST:%SYS>>select * from SYS.Database
ERROR #5540: SQLCODE: -30 Message:  Table 'SYS.DATABASE' not found

[SQL]TEST:%SYS>>  << entering multiline statement mode, 'GO' to execute >>
   1>>select DatabaseName, Directory, Size, Free, DiskFreeSpace
   2>>from SYS.Database
   3>>order by DiskFreeSpace DESC
   4>>go
ERROR #5540: SQLCODE: -30 Message:  Table 'SYS.DATABASE' not found

The documentation I'm using is:

https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic....

This states:

SQL Table Name: SYS.Database

Thanks

3 Comments
Discussion (3)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Fév 12 5m de lecture

IRIS %Status y Excepciones

Podéis encontrar errores en cualquier punto de la ejecución del programa, y hay varias formas de generarlos y manejarlos en IRIS. En este artículo, exploraremos cómo gestionar excepciones de manera eficiente.

Uno de los tipos de retorno más utilizados es %Status, que los métodos emplean para indicar éxito o fallo. Vamos a empezar hablando de los valores de %Status.

Trabajando con %Status

El tipo %Status representa errores o éxito. Muchos métodos del sistema devuelven %Status cuando ocurre un error. Podéis crear una estructura similar para errores en vuestra aplicación o convertir excepciones en %Status dentro del código. Incluso cuando habéis planteado excepciones en el código.

Vamos a empezar creando errores.

Macros

Cuando hablamos de errores, las macros son esenciales y facilitan la creación de valores %Status en el código. IRIS proporciona varias macros para generar y manejar errores dentro de vuestra aplicación.

La macro más utilizada es $$$ERROR.

$$$ERROR

La macro $$$ERROR está diseñada específicamente para generar y devolver un valor %Library.%Status. Es vuestra responsabilidad verificar el estado antes de continuar con la ejecución del programa. Esta macro está estrechamente relacionada con los errores generales del sistema. Tened en cuenta los siguientes puntos al utilizarla:

  • El primer argumento (códigos de error) hace referencia a códigos de error generales en el archivo %occErrors.
  • Si usáis errores predefinidos de ese archivo, podéis utilizar la macro directamente, con o sin argumentos adicionales.

Nota: Antes de continuar, podéis usar $SYSTEM.OBJ.DisplayError(status) o $SYSTEM.Status.DisplayError(status) para mostrar los errores y admitir la traducción de cadenas de texto para los errores.

Set sc = $$$ERROR($$$NamespaceDoesNotExist,"TEST")
Do $SYSTEM.OBJ.DisplayError(sc)

output: ERROR #5015: Namespace 'TEST' does not exist1
Set sc = $$$ERROR($$$UserCTRLC)
Do $SYSTEM.OBJ.DisplayError(sc)

ouput: ERROR #834: Login aborted1

Si utilizáis un código de error que no esté listado en %occErrors, se devolverá un error de "Código de estado desconocido" o "Unknown status code". Para mensajes de error generales, usad siempre el código de error predefinido $$$GeneralError == 5001.

Ejemplo de código de estado desconocido

Set sc = $$$ERROR(95875,"TEST Error")
Do $SYSTEM.Status.DisplayError(sc)

output: ERROR #95875: Unknown status code: 95875 (TEST Error)
Set sc = $$$ERROR($$$GeneralError,"TEST Error")
Do $SYSTEM.OBJ.DisplayError(sc)

output: ERROR #5001: TEST Error

$$$ADDSC

El %Status no almacena solo un error, sino que puede contener varios. Vuestro programa puede validar múltiples condiciones y registrar todos los errores en un único estado usando la macro $$$ADDSC.Por ejemplo, el método %ValidateObject() puede devolver varios errores en una sola respuesta utilizando esta funcionalidad.

La macro $$$ADDSC agrega un estado a otro, permitiendo combinar múltiples errores en un solo código de estado. El método $SYSTEM.Status.AppendStatus realiza la misma función, facilitando el manejo de múltiples errores en una respuesta unificada.

$$$ADDSC(sc1, sc2) o $SYSTEM.Status.AppendStatus(s1, s2) añaden sc2 a sc1, devolviendo un nuevo código de estado con ambos errores combinados.

ClassMethod AppendErrors()
{
    Set sc1 = $$$ERROR($$$UserCTRLC) 
    Set sc2 = $$$ERROR($$$NamespaceDoesNotExist,"TEST")
    Set sc = $$$ADDSC(sc1,sc2)
    Do $SYSTEM.Status.DisplayError(sc)
    Write !
    Set sc = $$$ADDSC(sc1,sc2)
    Do $SYSTEM.Status.DisplayError(sc)
}
output
LEARNING>do ##class(Learning.ErrorHandling).AppendErrors()
 
ERROR #834: Login aborted
ERROR #5015: Namespace 'TEST' does not exist
 
ERROR #834: Login aborted
ERROR #5015: Namespace 'TEST' does not exist

¡Ambos resultados son lo mismo!

$$$GETERRORCODE

La macro $$$GETERRORCODE(status) devuelve el valor del código de error del %Status. Esta macro pertenece al archivo %occStatus.inc

    Set status = $$$ERROR($$$UserCTRLC) 
    Write $$$GETERRORCODE(status),!
    #;output: 834
    Set status = $$$ERROR($$$GeneralError,"TEST Error")
    Write $$$GETERRORCODE(status)
    #;output: 5001

$$$GETERRORMESSAGE
La macro $$$GETERRORMESSAGE(sc, num) devuelve la parte del mensaje de error basado en el número num del %Status. Aquí va un ejemplo.

ClassMethod GetErrorMsgMacro()
{
	Set status = $$$ERROR($$$GeneralError,"TEST Error",1,$$$ERROR($$$GeneralError,"TEST Error2"))
	write $$$GETERRORMESSAGE(status),! ; It prints "TEST Error"
	#;
	Set st = $$$GETERRORMESSAGE(status,3) ; it get the "$$$ERROR($$$GeneralError,"TEST Error2")" in 3rd position based on the 2nd argument 
	write $$$GETERRORMESSAGE(st),! ; it prints TEST Error2
}

LEARNING>Do ##class(Learning.myexcept).GetErrorMsgMacro()
TEST Error
TEST Error2

 

Validar un %Status que se ha devuelto como resultado

Ahora que habéis creado el error y lo habéis devuelto a vuestro programa, el siguiente paso es validar si la respuesta devuelta es correcta o errónea.

La macro $$$ISERR comprueba si el estado representa un error. Devuelve 1 si el estado indica un error, en caso contrario devuelve 0. Hay otra macro, $$$ISOK, que devuelve 1 cuando el estado es correcto.

Visualización de errores

Si vuestro programa falla inesperadamente (siempre esperad lo inesperado), necesitáis mostrar el mensaje de error. La clase %SYSTEM.Status está específicamente diseñada para ver o crear valores %Status (si preferís no utilizar macros) y ya hemos visto los ejemplos anteriores.

Aquí hay métodos equivalentes en %SYSTEM.Status que sustituyen a las macros:

Macro Methods
$$$ISERR $SYSTEM.Status.IsError()
$$$ISOK $SYSTEM.Status.IsOK()
$$$ADDSC $SYSTEM.Status.AppendStatus()
$$$ERROR $SYSTEM.Status.Error()
$$$OK $SYSTEM.Status.OK()
$$$GETERRORCODE $SYSTEM.Status.GetErrorCodes()

Las Excepciones continuarán en el próximo artículo.

Discussion (0)0
Connectez-vous ou inscrivez-vous pour continuer