Rechercher

Article
· Juin 11 3m de lecture

Convertir consultas jerárquicas de Oracle a InterSystems IRIS: generar rangos de fechas

Si estáis migrando de Oracle a InterSystems IRIS, como muchos de mis clientes, podríais encontraros con patrones SQL específicos de Oracle que necesitan ser traducidos.

Tomad este ejemplo:

SELECT (TO_DATE('2023-05-12','YYYY-MM-DD') - LEVEL + 1) AS gap_date
FROM dual
CONNECT BY LEVEL <= (TO_DATE('2023-05-12','YYYY-MM-DD') - TO_DATE('2023-05-02','YYYY-MM-DD') + 1);

En Oracle:

  • LEVEL es una pseudocolumna usada en consultas jerárquicas (CONNECT BY). Comienza en 1 y se incrementa de 1 en 1.
  • CONNECT BY LEVEL <= (...) determina cuántas filas se van a generar.
  • La diferencia entre las dos fechas más uno da 11, así que la consulta produce 11 filas, contando hacia atrás desde el 12 de mayo de 2023 hasta el 2 de mayo de 2023.

Desglose del resultado:

LEVEL = 1  → 2023-05-12
LEVEL = 2  → 2023-05-11
...
LEVEL = 11 → 2023-05-02

Ahora la pregunta es: ¿Cómo conseguís esto en InterSystems IRIS, que no admite CONNECT BY?

Una solución es implementar una consulta al estilo SQL usando ObjectScript que imite este comportamiento. A continuación se muestra un ejemplo de definición CREATE QUERY que acepta una STARTDATE y un número de DAYS, y devuelve la lista descendente de fechas.


✅ InterSystems IRIS: Implementación de una consulta de intervalo de fechas

CREATE QUERY GET_GAP_DATE(IN STARTDATE DATE, IN DAYS INT)
  RESULTS (GAP_DATE DATE)
  PROCEDURE
  LANGUAGE OBJECTSCRIPT

  Execute(INOUT QHandle BINARY(255), IN STARTDATE DATE, IN DAYS INT)
  {
    SET QHandle("start") = STARTDATE
    SET QHandle("days")  = DAYS
    SET QHandle("level") = 1
    RETURN $$$OK
  }

  Fetch(INOUT QHandle BINARY(255), INOUT Row %List, INOUT AtEnd INT)
  {
    IF (QHandle("level") > QHandle("days")) {
      SET Row = ""
      SET AtEnd = 1
    } ELSE {
      SET Row = $ListBuild(QHandle("start") - QHandle("level") + 1)
      SET QHandle("level") = QHandle("level") + 1
    }
    RETURN $$$OK
  }

  Close(INOUT QHandle BINARY(255))
  {
    KILL QHandle
    QUIT $$$OK
  }

Podéis ejecutar la instrucción CREATE QUERY anterior en el Portal de Gestión del Sistema de IRIS, o mediante una herramienta como DBeaver o un notebook de Python/Jupyter usando JDBC/ODBC.


🧪 Ejemplo de uso:

Para generar el mismo resultado que la consulta de Oracle anterior, usad:

SELECT * FROM GET_GAP_DATE(
  TO_DATE('2023-05-12', 'YYYY-MM-DD'),
  TO_DATE('2023-05-12', 'YYYY-MM-DD') - TO_DATE('2023-05-02', 'YYYY-MM-DD') + 1
);

Esto generará:

GAP_DATE
----------
2023-05-12
2023-05-11
...
2023-05-02
(11 rows)

🔁 Uso avanzado: Unir con otras tablas

También podéis usar esta consulta como subconsulta o en joins:

SELECT * 
FROM GET_GAP_DATE(TO_DATE('2023-05-12', 'YYYY-MM-DD'), 11) 
CROSS JOIN dual;

Esto os permite integrar rangos de fechas en flujos de trabajo SQL más amplios.


¡Espero que esto ayude a quien esté enfrentando escenarios de migración de Oracle a IRIS! Si habéis creado soluciones alternativas o tenéis mejoras, me encantaría conocer vuestras opiniones.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
InterSystems officiel
· Juin 11

10 juin 2025 – Avis : Changement d'espace de noms et échecs d'affichage global

Résumé

ID de l'avis

Produit et versions concernés

Catégorie de risque et score

Exigences explicites

DP-439649

Produits:

  • InterSystems IRIS®
  • InterSystems IRIS for Health
  • HealthShare® Health Connect

Versions:

  • 2025.1.0.225.1
  • 2025.1.0.223.0
  • 2024.1.4
  • 2023.1.6
  • 2022.1.7

Opérationnel :

4 – Risque élevé

 

Stabilité du système : 3 – Risque moyen

 

Ce problème ne constitue pas une faille de sécurité. Il empêche les utilisateurs de contourner les vérifications d'autorisations ni d'accéder aux données en dehors de leur espace de noms autorisé.

Utilisation d'espaces de noms implicites, du Portail de Gestion ou d'un accès mixte en read-only/read-write aux bases de données

Un problème dans les produits InterSystems listés ci-dessus peut déclencher des erreurs <PROTECT> inattendues lors du basculement entre les espaces de noms ou de l'accès aux variables globales dans des environnements utilisant l'une des fonctionnalités suivantes :

  • Espaces de noms implicites
  • Accès en read-only à la base de données par défaut, mais accès en read-write ailleurs
  • Pages du Portail de Gestion répertoriant les routines et les variables globales

Les symptômes du problème sont les suivants :

  • Échecs de création d'espaces de noms (DP-440830)
  • Accès refusé par intermittence lors de la liste des routines dans le portail de gestion (DP-439622)
  • L'utilitaire d'affichage global n'affiche aucune variable globale si l'utilisateur ne dispose que d'autorisations en lecture seule (DP-440744)

Tous ces problèmes ont été résolus par DP-439649, qui corrige la manière dont les vérifications d'autorisations sont appliquées aux variables globales privées de processus et à la résolution des espaces de noms implicites. Ces corrections corrigent des erreurs de comportement, et non des erreurs de contrôle d'accès. Les autorisations sont correctement appliquées et les utilisateurs ne peuvent pas accéder aux variables globales ni aux espaces de noms en dehors de leur portée attribuée.

Ce problème est résolu dans les versions 2025.1.0.230.2, 2024.1.4.516.1, 2023.1.6.810.1 et 2022.1.7.116.1 des produits suivants :

  • InterSystems IRIS
  • InterSystems IRIS for Health
  • HealthShare® Health Connect

Pour toute question ou besoin d'aide, veuillez contacter le Worldwide Response Center (WRC).

Discussion (0)0
Connectez-vous ou inscrivez-vous pour continuer
Question
· Juin 11

Multiselction Zen component

Hi  Guys,

I'm looking for a Zen component that allow me to populate a list of items and the ability to multiselect, similar to checklist?

I've thought of using MultiSelectSet component but don't know how can I populate it like to a query or resultset?

a short sample code would be helpful.

 

Thanks

6 Comments
Discussion (6)1
Connectez-vous ou inscrivez-vous pour continuer
InterSystems officiel
· Juin 11

2025.1.0、2024.1.4、2023.1.6、2022.1.7 バージョンにおけるネームスペース切り替えとグローバル表示の問題を解決するポイントリリースについて

InterSystems は、以下のサポート対象製品バージョン 2025.1.0、2024.1.4、2023.1.6、および 2022.1.7 に影響する不具合を解決するために、新しいポイント アップデートをリリースしました。

  • InterSystems IRIS
  • InterSystems IRIS for Health
  • HealthShare Health Connect


この問題により、以下の機能を使用する際、予期しない <PROTECT> エラーやアクセス異常が発生する可能性があります:

  • 暗黙のネームスペース
  • データベースへの読み取り専用/読み取り書き込みの混合アクセス
  • 管理ポータルでのルーチンとグローバル一覧表示


含まれる症状:

  • ネームスペースの作成の失敗
  • ルーチンをリストするときに断続的に「アクセス拒否」エラーが発生する
  • 読み取り専用権限を持つユーザーに対してグローバル表示ページがデータを返さない

これらの問題によりアクセス制御やユーザー権限が損なわれることはありませんが、複数のシナリオにおいて、システムの想定された動作に影響を及ぼします
 

解決済みバージョン

修正は次のポイントリリースに含まれています。

  • 2025.1.0.230.2
  • 2024.1.4.516.1
  • 2023.1.6.810.1
  • 2022.1.7.116.1

影響を受けるバージョンを使用しているお客様は、適切なシステム動作を確保するために、関連する更新プログラムを適用することをお勧めします。

ご質問やサポートが必要な場合は、サポートセンターまでお問い合わせください。

Discussion (0)0
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Juin 10

開発者コミュニティ AI Bot はじめました

開発者の皆さん、こんにちは!

開発者コミュニティにスマートで積極的な新しい助っ人が誕生しました!

🤖 開発者コミュニティAIボット 通称 @DC AI Bot です! 🤖

DC AI assistant と同様に、IRIS のベクトル検索を搭載した @DC AI Bot は、さらに一歩進んでいます!

👉 新しく投稿されたすべての質問を自動的にスキャンし、関連する回答が見つかった場合、コメントに返信を残します。

メモ:現時点では、USコミュニティに投稿された質問に対して自動スキャンが行われています。日本語で質問を書いても英語でコメント欄に返信を残してくれるそうです!


Bot は有用でタイムリーな回答を提供することを目指していますが、その回答が必ずしも完全に正確で完全であるとは限らないことにご注意ください。

そのため、@DC AI Bot からの返信はすべて、経験豊富な IRIS 開発者であるモデレーターチームによってレビューされ、可能な限り最高の品質を保証しています。

ご質問を投稿されたばかりの方は、通知をご確認ください - DC AI Botがすでに必要な答えを用意しているかもしれません!

私たちの新しい助っ人、@DC AI Bot をどうぞよろしくお願いします!

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