9 Followers · 1.2K Posts

SQL is a standard language for storing, manipulating and retrieving data in relational databases.

Question Scott Roth · Feb 27

I am trying to create a task that has a variable property that a user can specify DaysBack but it keeps coming up blank when I ask the system to get the date as of DaysBack from the CURRENT_DATE. Can someone tell me why I am not getting a value back in my tDate variable?

Class OSU.Workday.TerminationsTask Extends %SYS.Task.Definition
{

Parameter TaskName As STRING = "OSU - Workday Termination Update";

Property DaysBack As %Integer [ InitialExpression = 1 ];

Method OnTask() As %Status
{
	Set tSC=$$$OK
	#Dim tException as %Exception.SystemException
    try{
        set tDate = ""
        &sql(SELECT DATEADD('day', -:daysBack, CURRENT_DATE) INTO :tDate)
        ZWRITE tDate
        set tSC = ..SelectTerminations(tDate)
        $$$ThrowOnError(tSC)
    }Catch (tException) {
		Set tSC = tException.AsStatus()
	}
	Return tSC
}

Method SelectTerminations(pDate As %DateTime) As %Status
{
    Set tSC=$$$OK
    #Dim ex as %Exception.SystemException
    try
    {
        set sqlQuery = "SELECT EMPLID, MedCtrID, LastName, FirstName, EFFDT FROM OSU_Workday_SQL.PDMTerminations WHERE EFFDT > ?)"
        set tStatment = ##class(%SQL.Statement).%New()
        Set qStatus = tStatment.%Prepare(sqlQuery)
        $$$ThrowOnError(qStatus)
        set rset = tStatment.%Execute(pDate)
        $$$ThrowOnError(rset)
        #Dim tTermService As OSU.DataSource.Workday.TermService
        set tTermConfigName="OSU.DataSource.Workday.TermService"
        $$$ThrowOnError(##class(Ens.Director).CreateBusinessService(tEIDEMPIDConfigName,.tEIDEMPIDService))
        if rset.%ROWCOUNT > 0       
        {
            set tTerm = ##class(OSU.Workday.Messages.WorkdayTerminations).%New()
            while rset.%Next()
            {
                set tTerm.EMPLID = rset.%Get("EMPLID")
                set tTerm.MedCtrID = rset.%Get("MedCtrID")
                set tTerm.Lastname = rset.%Get("LastName")
                set tTerm.Firstname = rset.%Get("FirstName")
                set tTerm.EFFDT = rset.%Get("EFFDT")
                set tSC = tTerm.%Save()
                $$$ThrowOnError(tSC)
                set (tTermOutput,tHint) = ""
                $$$ThrowOnError(tTermService.OnProcessInput(tTerm,.tTermOutput,.tHint))
            }
        }
    }
    Catch ex
    {
        Set tSC = ex.AsStatus()
    }
    Return tSC
}

ClassMethod TestTask() As %Status
{
   
    Set tSC=$$$OK
	set tTask = ##class(OSU.Workday.TerminationsTask).%New()
	$$$ThrowOnError(tTask.OnTask())
    Return tSC
}

/// Location and Revision of this file in Perforce (Auto-updating)
Parameter SrcVer = "$Id: //custom_ccrs/us/OSUM/OSUMHSCUSTOM/UAT/cls/OSU/Workday/TerminationsTask.xml#3 $";

}
5
0 108
Article Ikram Shah · May 18, 2024 3m read

In the previous article, we saw in detail about Connectors, that let user upload their file and get it converted into embeddings and store it to IRIS DB. In this article, we'll explore different retrieval options that IRIS AI Studio offers - Semantic Search, Chat, Recommender and Similarity. 

New Updates  ⛴️ 

  • Added installation through Docker. Run `./build.sh` after cloning to get the application & IRIS instance running in your local
  • Connect via InterSystems Extension in vsCode - Thanks to @Evgeny.
1
1 490
Article David Hockenbroch · Feb 25 2m read

Inspired by @Ashok Kumar Thangavel's post on the ideas portal here as well as my own wishes for a solution to this problem, I have come up with a simple way to allow more complete and consistent JSON queries without having to specify every desired field. I have created a class that extends the built-in %JSON.Adaptor class and makes its %JSONExportToString and %JSONExportToStream methods accessible through SQL with just a couple of simple SqlProc Methods.

Class DH.JSONAdaptor Extends %JSON.Adaptor [ Abstract ]
{
ClassMethod jsonstring(id, map = "") [ SqlProc ]
{
	try{
		set myobj = ..%OpenId(id)
		set sc = myobj.%JSONExportToString(.json,map)
		if $$$ISERR(sc) $$$ThrowStatus(sc)
		return json
	}
		catch ex{
		throw ex
	}
}

ClassMethod jsonstream(id, map = "") [ SqlProc ]
{
	try{
		set myobj = ..%OpenId(id)
		set sc = myobj.%JSONExportToStream(.json,map)
		if $$$ISERR(sc) $$$ThrowStatus(sc)
		return json
	}
	catch ex{
		throw ex
	}
}
}
3
0 163
Question Hour Abdellatif · Feb 26

Hello everyone,

I’m trying to find a way to manage globals from our Java application. We have two separate features:

  • Managing tables normally using SQL

  • Managing globals, since some globals exist without class or table definitions

Cache version : Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2016.1.1 (Build 108U_SU), Thu Jul 7 2016 09:39:04 EDT

I tried to retrieve the globals tree, update node values, and append nodes using SQL by calling stored procedures, but I couldn’t find any procedures for adding, updating, or deleting nodes.

I also tried using cacheextreme.jar

0
0 59
Article Benjamin De Boe · Nov 9, 2023 3m read

With the release of InterSystems IRIS Cloud SQL, we're getting more frequent questions about how to establish secure connections over JDBC and other driver technologies. While we have nice summary and detailed documentation on the driver technologies themselves, our documentation does not go as far to describe individual client tools, such as our personal favourite DBeaver. In this article, we'll describe the steps to create a secure connection from DBeaver to your Cloud SQL deployment.

22
2 2508
Article Marco Bahamondes · Jun 24, 2025 3m read

Introduction

InterSystems IRIS allows you to build REST APIs using ObjectScript classes and the %CSP.REST framework. This enables the development of modern services to expose data for web apps, mobile apps, or system integrations.

In this article, you'll learn how to create a basic REST API in InterSystems IRIS, including:

  • A persistent data class
  • A REST class with GET and POST methods
  • A web application to expose the API
  • A full demonstration using Docker

4
3 437
Question Enrico Parisi · Feb 19

I need to reproduce a table (in fact a view, but let's start with a simple table 😊) in IRIS as the currently used in Oracle.

I need to expose/project one column to JDBC as CLOB, in my class I have the corresponding property defined as:

Property GlobStream As %Stream.GlobalCharacter;

In JDBC this column is projected as LONGVARCHAR, this is compliant with the documentation but I need to project it as CLOB.

In addition, I'm no expert in JDBC but wit seems that LONGVARCHAR has a Maximum Length 32,700 characters in JDBC, not quite enough for an arbitrary stream.

8
0 124
Discussion Jorge Jaramillo Herrera · Feb 23

Hello everyone,
I’m looking to implement Continuous Training (CT) as part of an MLOps strategy for some data science projects in IRIS. I want to automate the full cycle:

- Monitoring model performance & accuracy degradation.
- Retraining models automatically.
- Validating and updating production models.

I’ve looked into IntegratedML, but it seems more focused on the SQL interface for training (AutoML). Even with the new Custom Models (beta), which allows for more flexibility with Python, it doesn't seem to provide the "Continuous" orchestration out of the box.

I’d like to know:

0
0 76
Question Dmitrii Baranov · Jan 20

Why do these clauses affect SQL performance?

select ID from some_table where row_status in ('I','U') order by ID limit 5 - makes the query infinite select top 10 ID from some_table where row_status in ('I','U') order by ID - the same select ID from some_table where row_status in ('I','U') order by ID - is fast

Actually there are no rows in the table having row_status 'I' or 'U'.

15
0 201
Question Hour Abdellatif · Jan 26

Hello everyone,

My team lead mentioned that users can sometimes create globals directly without associating them with tables or classes. In this case, these globals would not be accessible via SQL.

Is this correct? Can a global exist independently in this way, and if so, is there a specific approach to access or manage them without SQL?

9
0 173
Article Alberto Fuentes · Feb 13 10m read

10:47 AM — Jose Garcia's creatinine test results arrive at the hospital FHIR server. 2.1 mg/dL — a 35% increase from last month.

What happens next?

  • Most systems: ❌ The result sits in a queue until a clinician reviews it manually — hours or days later.
  • This system: 👍 An AI agent evaluates the trend, consults clinical guidelines, and generates evidence-based recommendations — in seconds, automatically.

No chatbot. No manual prompts. No black-box reasoning.

This is event-driven clinical decision support with full explainability:

image

Triggered automatically by FHIR events ✅ Multi-agent reasoning (context, guidelines, recommendations) ✅ Complete audit trail in SQL (every decision, every evidence source) ✅ FHIR-native outputs (DiagnosticReport published to server)

Built with:

  • InterSystems IRIS for Health — Orchestration, FHIR, persistence, vector search
  • CrewAI — Multi-agent framework for structured reasoning

You'll learn: 🖋️ How to orchestrate agentic AI workflows within production-grade interoperability systems — and why explainability matters more than accuracy alone.

2
2 218
Article Jorge Jaramillo Herrera · Jan 9 9m read

1-command only required for an entire IRIS instance for Data Science projects, and leveraging this to compare query methods' speed (Dynamic SQL, Pandas Query, and Globals).

Before joining InterSystems, I worked in a team of web developers as a data scientist. Most of my day-to-day work involved training and embedding ML models in Python-based backend applications through microservices, mainly built with the Django framework and using Postgres SQL for sourcing the data.

3
1 95
Article Evgeny Shvarov · Feb 16 5m read

How I Vibecoded a Backend (and Frontend) on InterSystems IRIS

I wanted to try vibecoding a real backend + frontend setup on InterSystems IRIS, ideally using something realistic rather than a toy example. The goal was simple: take an existing, well-known persistent package in IRIS and quickly build a usable UI and API around it — letting AI handle as much of the boilerplate as possible. Here is the result of the experiments.

2
4 267
Article Ben Schlanger · May 7, 2025 4m read

Here at InterSystems, we often deal with massive datasets of structured data. It’s not uncommon to see customers with tables spanning >100 fields and >1 billion rows, each table totaling hundred of GB of data. Now imagine joining two or three of these tables together, with a schema that wasn’t optimized for this specific use case. Just for fun, let’s say you have 10 years worth of EMR data from 20 different hospitals across your state, and you’ve been tasked with finding….

3
6 453
Article Vachan C Rannore · Dec 28, 2025 1m read

SETassigns value to the variable at RUNTIME.

#DIM declare the variable and it's Data Type at COMPILE TIME.


SET #DIM
Makes the variables Dynamic. Improves Readability.
No Data Type Declaration. Enables IDE auto-completion.
Runtime Useful for Object references.

As%String

or #DIM? Your design, your rules.

18
4 354
Question Scott Roth · Jan 13

New to using Analytics and using Dashboards. We have this Report, SQL Query that lists out the Activity per Data Source in Health Share Provider Directory. Instead of running it as a report, because it takes a while to run, was wondering if there is a way to do this as a Dashboard instead.

How can I take the SQL from this report and create a Dashboard instead?

3
0 144
Question Victor Paredes · Jan 7

Hello,

We are accessing an InterSystems Cacha database from Microsoft SQL Server using a linked server over ODBC (ODBC35). Queries are executed using OPENQUERY.

On the SQL Server side, there is a linked server property called Query Timeout. By default it is set to 0 (no timeout). We are considering setting it to 15 seconds and would like to understand how Cache behaves in this scenario.

6
0 146
Question Scott Roth · Jan 2

Defining my first REST API within InterSystems using iris-rest-Api-template as a basis and I am seeing if someone could provide me some guidance to see if I can make it work.  

In some of my other posts, I have been trying to come up with a way for our Enterprise Application Development team which works with .Net to build Applications to make a REST call to our instance of InterSystems to query some of the Cache Tables we have defined. 

Using the iris-rest-api-template, I have created the osuwmc.DataLookup.REST.Base.cls

ClassExtends%CSP.REST"application/json"
4
0 122
Question Scott Roth · Jan 2

There is a Master Table within IRIS that I am populating from Epic but want to share it with our Enterprise Application Development Team (Web). As a test I was able to use _SYSTEM from postman to execute the following.

POST /api/atelier/v1/xxxx/action/query HTTP/1.1
Host: xxxxxxxx
Content-Type: application/json
Authorization: ••••••
Cookie: CSPSESSIONID-SP-443-UP-api-atelier-=00f0000000000AKyLjBfUvU$MpFD8UT8y$EoNKNw1ixZeXN4_Q; CSPWSERVERID=hzZAT5rb
Content-Length: 86

{"query": "SELECT * FROM osuwmc_Epic_Clarity.DepartmentMaster WHERE ID = '300000000'"}
7
0 110
Question Evgeny Shvarov · Dec 28, 2025

Hi developers!

There is a neat feature of ObjectScript classes - Query element, which allows you to write in a clear SQL (without any & or ()), pass parameters to it and call it from ObjectScript as do QueryNameFunc() or via Call SQLProcedureName via SQL, .e.g.

Query MyQuery(p as%String

All works fine, but when I tried to use the same for a DELETE statement see the following error:

SELECT expected, DELETE found ^ DECLARE Q1 CURSOR FOR DELETE

Is the Query element for SELECT only? What am I doing wrong? )

4
0 99
Article Thomas Dyar · Dec 27, 2025 10m read

The Rut

Up until early this year, I haven't been not doing much coding at all -- I had gotten sick of it.

After many years as a hands-on software engineer and data scientist, I got burned out around 2015. I switched to business development roles focused on "external innovation," then joined InterSystems in 2019 as a product manager. I missed the creative aspects of coding, but not the tedium. The endless cycle of boilerplate, debugging, and context-switching had left me creatively depleted.

0
1 159
Article Tani Frankel · Dec 22, 2025 1m read

Looking at my database I see I have a very big ^rINDEXSQL global? Why is that? 😬

In the Management Portal SQL page, under "SQL Statements" I see a 'Clean stale' button - what does this do? 🤔

In the list of Statements some have a 'Location' value and some don't? How is that? 🤨

0
1 134
InterSystems Official Benjamin De Boe · Mar 12, 2025

Hi,

We’re launching an Early Access Program for an upcoming Table Partitioning feature that will help IRIS customers manage very large tables, and distribute row data and associated indices across databases and storage tiers. Table Partitioning cuts deep into the core of IRIS relational data management, so we want to make sure we get things right through working with a few engaged customers who can provide feedback on the initial deliverables, and fine-tune as needed.

12
1 436
Question Scott Roth · Dec 17, 2025

I want to extract data from IRIS (Health Share Provider Directory) and write the data out to a file that I can use within an external system. Using EnsLib.SQL.Service.GenericService do I need to supply Credentials if I am querying IRIS locally? I have always used JDBC to connect externally when creating Services and Operations to read/write SQL data from external Databases, but never internally. Normally I would just use sql or code to pull the data within a Process or DTC. But in this case, I want the Service to drive the workflow, and query the data from Local Tables

1
0 96